设计模式原则和分类
SOLID原则
单一职责原则(SRP)
the single responsibility principle, 一个类只做一种类型的责任。
开闭原则(OCP)
the open closed principle,对扩展开放,对修改关闭。
里氏代换原则(LSP)
the liskov substitution principle,任何基类出现的地方,子类一定可以出现。
依赖倒转原则(DIP)
the dependency inversion principle,针对接口编程,依赖于抽象而不依赖于具体。
- 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
- 抽象不应该依赖于细节,细节应该依赖于抽象
接口隔离原则(ISP)
the interface segregation principle,使用多个隔离的接口,比使用单个接口要好。
一个类对另一个类的依赖应该限制在最小化的接口上。不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好。
客户模块不应该依赖大的接口,应该裁减为小的接口给客户模块使用,以减少依赖性。如Java中一个类实现多个接口,不同的接口给不用的客户模块使用,而不是提供给客户模块一个大的接口。
迪米特法则(最少知道)
一个实体应当尽量少的与其他实体之间发生相互作用。迪米特法则还有一个更简单的定义:只与直接的朋友通信。首先来解释一下什么是直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
合成复用原则
尽量使用合成/聚合,而不是继承。组合/聚合和继承是实现复用的两个基本途径。合成复用原则是指尽量使用合成/聚合,而不是使用继承。
设计模式分类
创建型模式,共五种:
工厂方法模式 详解
抽象工厂模式 详解
单例模式 详解
建造者模式 详解
原型模式 详解
结构型模式,结构型模式是为解决怎样组装现有的类,设计他们的交互方式,从而达到实现一定的功能的目的,共七种:
适配器模式 详解
装饰器模式--统一接口,构造器接口注入实例,装饰注入实例 详解
代理模式--代理和实现类继承一个接口,代理持有实现类对象,访问代理 详解
外观模式--新建facade类,包装多个子系统 详解
桥接模式
组合模式
享元模式
结构型模式包容了对很多问题的解决。例如:扩展性(外观、组成、代理、装饰)封装性(适配器,桥接),结构型模式处理类或对象的组合,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。
行为型模式,对类或对象怎样交互和怎样分配职责进行描述,共十一种:
- 父类与子类关系: 策略模式、模板方法模式(模板方法父类规定流程,子类各自实现细节,策略模式完全对等,任意使用)详解
- 两个类之间关系: 观察者模式、迭代子模式、责任链模式、命令模式详解
- 类的状态: 备忘录模式、状态模式
- 通过中间类: 访问者模式、中介者模式、解释器模式
其实还有两类:并发型模式和线程池模式。
I am a slow walker, but I never walk backwards.