设计模式的种类和七大原则

设计模式的种类

设计模式有23种,分为三类:java

  • 建立型模式:
    • 单例模式、抽象工厂模式
    • 原型模式、建造者模式、工厂模式
  • 结构型模式
    • 适配器模式、桥接模式、装饰模式、组合模式
    • 外观模式、享元模式、代理模式
  • 行为型模式
    • 模板方法模式、命令模式、访问者模式
    • 迭代器模式、观察者模式、中介者模式
    • 备忘录模式、解释器模式、状态模式
    • 策略模式、责任链模式

设计模式七大原则

设计模式的核心思想

  • 找出代码中的可变化之处,并独立出来,不要和固定代码混在一块儿
  • 针对接口编程, 不要针对实现编程
  • 为了交互对象之间的松耦合设计而努力

耦合度比较

  • 泛化(继承)==实现>组合>聚合>关联>依赖

1. 单一职责

一个类A负责多个职责时,要将A的粒度分解成对应职责的类,对应单个职责,在后期对某个职责进行更改时,不会对其余职责形成影响。下降类的复杂度编程

2. 接口隔离

一个类不该该依赖不须要的接口,即一个类对另外一个类的以来应该创建在最小接口上,当要以来的接口中有不须要的部分,就应该将大的接口拆分红小接口,保证依赖的接口都是须要的设计模式

3. 依赖倒置

抽象不要依赖细节,细节要依赖抽象优化

低层模块最好是依赖抽象,抽象中不要有具体操做,具体操做交给细节this

继承要遵照里氏替换原则设计

抽象--》接口或者抽象类3d

细节--》实现类代理

  • 依赖关系的三种传递方式code

    • 接口传递对象

      interface IOpenAndClose{
          public void open(ITV tv);
      }
      interface ITV{
          public void play();
      }
      //实现接口
      class OpenAndClose implements IOpenAndClose{
          public void open(ITV tv){
              tv.play();
          }
      }
    • 构造方法传递

      interface IOpenAndClose{
          public void open();
      }
      interface ITV{
          public void play();
      }
      //实现接口
      class OpenAndClose implements IOpenAndClose{
          private ITV tv;
          public OpenAndClose(ITV tv){  //使用构造器
              this.tv = tv;
          }
          
          public void open(){
              this.tv.play();
          }
      }
    • setter传递

      interface IOpenAndClose{
          public void open(ITV tv);
          public void setTv(ITV tv);
      }
      interface ITV{
          public void play();
      }
      //实现接口
      class OpenAndClose implements IOpenAndClose{
          private ITV tv;
          public void setTv(ITV tv){  //调用setter方法
              this.tv = tv;
          }
          
          public void open(){
              this.tv.play();
          }
      }

4.里氏替换原则

正确使用继承:全部引用基类的方法必须能透明的使用其子类的对象。子类中不要轻易重写父类的方法,能够经过聚合,组合,依赖的方法来解决问题,让子类和父类再也不继承,而是共同继承一个更加基础的base类,关于父类中子类须要的方法,能够经过依赖或者继承来获取对象并调用方法,能够下降耦合

普通的继承

遵照里氏替换的改进

5.开闭原则

提供方(被依赖)--》开放扩展

使用方(依赖)--》修改关闭

如图:paint为使用方,三个类型类是提供方,当咱们要添加新的绘画类型时,不只要建立新的类,还要在paint中添加新的方法,这样自违背了开闭原则,代码扩展性也很低

如下优化遵照了开闭原则,将具体的各个类型的draw方法实如今各自的实现类中,paint依赖抽象,只须要调用Shape对象的draw方法,对应调用各自实现类的draw方法,这样就达到目的,使用方无需更改。

6. 迪米特法则(直接朋友法则/最少知道原则)

直接朋友:B是A的成员变量,B是A中方法的入参,B是A中方法的返回值类型

以上三种状况称为B是A的直接朋友,其它的为陌生类

迪米特法则:陌生类最好不要以局部变量的形式出如今类的内部;以下降类与类之间的耦合

对于被依赖的类无论有多复杂,都封装在类的内部,对外只提供public方法,不要泄露任何信息;

7.合成复合原则

尽可能使用聚合和合成,不要使用继承

如下为依赖,组合,聚合的类图

相关文章
相关标签/搜索