赞
踩
1、设计模式的目的
道亦有道,术亦有术,在成长这件事上,吃经验无疑是速度最快的一种。而设计模式则是无数前辈们爬过的坑留下的经验总结,所以当值得细细精品。
在编写软件的过程中,无时不面临着来自耦合性、内聚性以及可维护性,可扩展性,重用性,灵活性等各方面的挑战。而设计模式的存在,则是为了让程序具有更好的:
2、设计模式七大原则
设计模式原则也就是在编写程序时,应当遵守的原则,也就是各种设计模式的基础,即设计模式为什么这样设计的依据。
3、七大原则
3.1 单一职责原则
1、基本介绍
对类来说,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2.当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2
2、应用实例
以交通工具为例:
方式一:
只有run方法,违反了单一职责原则,对于不同的交通工具无法解决
- class Vehicle {
- public void run(String vehicle) {
- System.out.println(vehicle + "在公路上跑");
- }
- }
-
方式二:
按照不同的交通工具拆解成不同的类,即将类分解,但是改动比较大
- class VehicleRoad {
- public void run(String vehicleRoad) {
- System.out.println(vehicleRoad + "在陆地上跑");
- }
- }
-
- class VehicleAir {
- public void run(String vehicleA) {
- System.out.println(vehicleA + "在天上飞");
- }
- }
-
- class VehicleWater {
- public void run(String vehicleWater) {
- System.out.println(vehicleWater + "在水里游");
- }
- }
-
方式三:
增加方法,虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上仍然遵守单一职责
- class Vehicle2 {
- public void runRoad(String vehicle) {
- System.out.println(vehicle + "在公路上跑");
- }
-
- public void runAir(String vehicle) {
- System.out.println(vehicle + "在天上飞");
- }
-
- public void runWater(String vehicle) {
- System.out.println(vehicle + "在水里游");
- }
- }
-
3、单一职责原则细节
3.2 接口隔离原则
1、基本介绍
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
2、实际案例
先看类图:
类A通过接口interface1依赖类B,类C通过接口interface1依赖类D,如果接口interface1对于类A和类C来说不是最小接口,则类B和D必须实现它们不需要的方法。
按照接口隔离原则,将接口interface1拆分成独立的几个接口,类A和C分别与他们需要的接口建立依赖关系如下所示:
3.3 依赖倒转原则
1、基本介绍
依赖倒转原则(Dependence Inversion Principle)指:
2、应用实例
完成Person接收信息的功能
方式一:
简单,比较容易想到
如果获取的是微信、短信等,则新增类,同时Person也要增加相应的接收方法
- class Email{
- public String getInfo(){
- System.out.println("电子邮件");
- }
- }
- class Person{
- public void receive(Email email){
- System.out.println(email.getInfo());
- }
- }
-
方式二:
引入一个抽象接口IReceiver,表示接收者,这样Person类与接口IReceiver发生依赖,扩展方便
- interface IReceiver{
- public String getInfo();
- }
-
- class Email implements IReceiver{
- public String getInfo(){
- return "电子邮件";
- }
- }
- class Person{
- public void receive(IReceiver receiver){
- System.out.println(receiver.getInfo());
- }
- }
-
3、依赖关系传递的三种方式
接口传递
- interface IOpenAndClose{
- public void open(ITV itv);
- }
-
- interface ITV{
- public void play();
- }
-
- class CHnagHong implements ITV{
-
- @Override
- public void play() {
- System.out.println("长虹电视机,打开");
- }
- }
-
- class OpenAndClose implements IOpenAndClose{
- @Override
- public void open(ITV itv) {
- itv.play();
- }
- }
-
构造方法传递
- interface IOpenAndClose{
- public void open();
- }
-
- interface ITV{
- public void play();
- }
-
- class OpenAndClose implements IOpenAndClose{
- public ITV itv;
- public OpenAndClose(ITV itv){
- this.itv=itv;
- }
-
- @Override
- public void open() {
- itv.play();
- }
- }
-
通过setter方法传递
- interface IOpenAndClose{
- public void open();
-
- public void setTv(ITV itv);
- }
-
- interface ITV{
- public void play();
- }
-
- class OpenAndClose implements IOpenAndClose{
- private ITV itv;
-
- @Override
- public void setTv(ITV itv) {
- this.itv=itv;
- }
-
- @Override
- public void open() {
- itv.play();
- }
-
- }
-
4、注意细节
3.4 里式替换原则
1、继承带来的问题
2、基本介绍
3.5 开闭原则
1、基本介绍
3.6 迪米特法则
1、基本介绍
3.7 合成复用原则
1、基本介绍
尽量使用合成/聚合的方式,而不是使用继承
4、设计原则核心思想
5、设计模式类型
设计模式大体上分为三种类型,共23种
创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式(责任链模式)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。