设计模式总结

分析对象,分析业务中各对象结构,行为。

设计原则

  1. 单一职责原则  职责单一
  2. 开放封闭原则  扩展开放,修改关闭
  3. 里氏替换原则  子类可替换父类的实例
  4. 接口隔离原则  接口隔离,不要将所有方法都扔到一个接口,使用多个专门功能的接口,而不是单一总接口
  5. 依赖倒转原则  依赖抽象,不要依赖具体
  6. 合成复用原则  
    简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承
    给一个类添加功能(扩展):关联(组合,聚合),继承
    has-a 使用关联 (推荐使用)【桥接模式】,is-a 使用继承(减少使用)
    如果类之间的继承结构稳定(不会轻易改变),继承层次比较浅(比如,最多有两层继承关系),继承关系不复杂,我们就可以大胆地使用继承。反之,系统越不稳定,继承层次很深,继承关系复杂,我们就尽量使用组合来替代继承。
  7. 迪米特法则,最少知道原则
    尽可能少的和其他实体相互作用,对其他类尽可能少得知道,减少依赖。
    不希望类之间建立联系。如果需要建立联系,希望通过它的友元类(中间件)转达。【终结者模式】
    简单定义:只与直接的朋友通信
    直接朋友:每个对象都会和其他对象有耦合关系,就说他们有朋友关系。耦合方式有很多,依赖,关联,组合,聚合等。其中,我们称出现在成员变量,方法参数,方法返回值中的类为直接朋友,而出现在局部变量中的类则是不直接的朋友。
    也就是说陌生类最好不要作为局部变量的形式出现在类的内部

基于接口编程而非实现
从本质上来看,“接口”就是一组“协议”或者“约定”,是功能提供者提供给使用者的一个“功能列表”。
“接口”在不同的应用场景下会有不同的解读,比如服务端与客户端之间的“接口”,类库提供的“接口”,甚至是一组通信的协议都可以叫作“接口”。刚刚对“接口”的理解,都比较偏上层、偏抽象,与实际的写代码离得有点远。
如果落实到具体的编码,“基于接口而非实现编程”这条原则中的“接口”,可以理解为编程语言中的接口或者抽象类。
这条原则能非常有效地提高代码质量,之所以这么说,那是因为,应用这条原则,可以将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低耦合性,提高扩展性。
这条原则的另一个表述方式,是“基于抽象而非实现编程”。后者的表述方式其实更能体现这条原则的设计初衷。在软件开发中,最大的挑战之一就是需求的不断变化,这也是考验代码设计好坏的一个标准。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化。好的代码设计,不仅能应对当下的需求,而且在将来需求发生变化的时候,仍然能够在不破坏原有代码设计的情况下灵活应对。而抽象就是提高代码扩展性、灵活性、可维护性最有效的手段之一

创建型模式

  1. 单例模式
  2. 工厂模式
  3. 建造者模式 loading... 
创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。
单例模式用来创建全局唯一的对象。
工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。
建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象。
原型模式针对创建成本比较大的对象,利用对已有对象进行复制的方式进行创建,以达到节省创建时间的目的。
View Code

 结构型模式(结构型模式主要总结了一些类或对象组合在一起的经典结构)

  1. 代理模式
  2. 桥接模式
  3. 适配器、外观模式
  4. 装饰者模式
代理模式:代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能(可以增加新功能),这是它跟装饰器模式最大的不同。
桥接模式:桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。
装饰器模式:装饰者模式在不改变原始类接口的情况下,对原始类功能增强,并且支持多个装饰器的嵌套使用。
适配器模式:适配器模式是一种事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。 

行为型模式

观察者模式 观察者模式,它将观察者和被观察者代码解耦

模版方法模式

策略模式

状态模式

命令模式

迭代器模式

 

设计模式要干的事情就是解耦

创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的行为代码解耦。

借助设计模式,我们利用更好的代码结构,将一大坨代码拆分成职责更单一的小类,让其满足开闭原则、高内聚低耦合等特性,以此来控制和应对代码的复杂性,提高代码的可扩展性。

阅读:文章1文章2文章3

 

19.理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?

20.KISS原则和YAGNI原则

21.DRY 原则 

22.迪米特法则

23.loading...

 

设计原则和思想比设计模式更加普适和重要。掌握了代码的设计原则和思想,我们能更清楚的了解,为什么要用某种设计模式,就能更恰到好处地应用设计模式。

 

 

posted @ 2019-06-17 09:46  vvf  阅读(152)  评论(0编辑  收藏  举报