在开始正式写设计模式系列前,先来做个简要描述吧
一. 首先来概括一下面向对象设计的七大原则
1. 单一职责原则(SingleResponsibility Principle, SRP):类的职责要单一,不能将太多的职责放在一个类中。
2. 开闭原则(Open-ClosedPrinciple, OCP):软件实例对扩展是开放的,但是对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能。
3. 里氏代换原则(LiskovSubstitution Principle, LSP):在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象。
4. 依赖倒转原则(DependencyInversion Principle, DIP):要针对抽象层编程,而不要针对具体类编程。
(1)要针对接口编程,而不要针对实现编程。依赖倒转原则的常用实现方式之一是在代码中使用抽象类,而将具体类放在配置文件中。
(2)类之间的耦合可以分为三种:零耦合关系、具体耦合关系、抽象耦合关系。
依赖注入:当将一个类的对象传入另一个类时,应该尽量传入父类的对象,而在程序运行时再通过子类对象来覆盖父类对象。依赖注入有以下三种方式:构造注入、设值注入、接口注入。
5. 接口隔离原则(InterfaceSegregation Principle, ISP):使用多个专门的接口来取代一个统一的接口。
6. 合成复用原则(CompositeReuse Principle, CRP):在系统中应该尽量多的使用组合和聚合关联关系,尽量少用继承关系。
7. 迪米特法则(Law ofDemeter, LoD):一个软件实体对其它实体的引用越少越好,当两个类不必直接通信时,可以在它们之间引入一个第三者。
二. 然后来简要概括一下,这后的系列中所要讨论的所有典型设计模型
1. Abstract Factory(抽象工厂模式)
提供一个接口,通过该接口可以在不指定具体类型的情况下,创建一系列相关的或不相关的对象。
2. Adapter(适配器模型)
把一个类的接口转换成客户需要的接口,适配器模式可以使接口不兼容的类可以协同工作。
3. Bridge(桥接模式)
把复杂对象的构造过程和对象的具体表现形式分离,这样相同的构造过程就可以根据需要构造出不同的复杂对象。
4. Chain of Responsibility(责任链模型)
把消息的发送者和接收者分离,让多个消息接收者都有机会处理消息(请求),即把多个消息的处理者连接成一条链,当消息到来时,让消息在这条链上传递给各个处理者,直到消息被处理为止,否则就沿着链不断往后传递消息。
5. Command(命令模式)
把一个请求封装成一个对象,这样就可以把用户的请求参数化成不同的请求、队列或把请求转换成日志,并且支持撤销操作。
6. Composite(组合模式)
把一系列的对象组合成一个树形层级结构,这样用户可以以统一的形式来单独地操作每个对象。
7. Decorator(装饰器模式)
动态地为一个对象添加职责,装饰器模式为子类继承和扩展可选择功能提供了方便。
8. Façade(外观模式)
为子系统中的一系列的接口提供一个统一的接口,外观模式为了方便整个系统更易于使用而抽象出一个更高层的接口。
9. Factory Method(工厂方法模式)
定义一个专门用于创建对象的接口,让子类决定创建怎样的对象(即实例化哪个类)。
10. Flyweight(享元模式)
通过共享来支持大量细粒度的对象。
11. Interpreter(解释器模式)
给定一种语言,把这种语言的语法定义成一个解释器,这样这个解释器就可以处理符合特定语法的语句。
12. Iterator(迭代器模式)
为一个对象集合提供一种顺序访问的方法,且不需要把该集合的底层细节暴露出来。
13. Mediator(中介者模式)
定义一个可以把一系列的对象之间的交互细节都封装起来的对象,中介者模式保证了对象之间的松耦合。
14. Memento(备忘录模式)
在不违背封装的前提下,保存一个特定对象的内部状态,以便将来还可以让该对象回到这个状态。
15. Observer(观察者模式)
在很多对象之间定义一个一对多的依赖,当被依赖的对象的状态发生改变时,所以依赖它的其它对象都会被通知到,收到通知后,它们会根据各自的定义自动地执行自己的操作。
16. Prototype(原型模式)
保存一个特定类型的原型对象,创建新对象时通过拷贝这个原型对象来创建。
17. Proxy(代理模式)
为一个对象提供一个代理,以实现对这个对象的访问控制。
18. Singleton(单例模式)
保证一个类只有一个实例,或者为一个类提供一个唯一的全局的访问入口。
19. State(状态模式)
当一个对象的内部状态改变时,允许改变其行为,好像这个对象改变了它的类一样。
20. Strategy(策略模式)
定义一系列的算法,并把每个算法单独封装起来,且让这些算法可以互换。策略模式使算法和这些算法的使用者相互独立。
21. Template Method(模板方法模式)
定义一种操作的算法框架,让子类去具体实现这个框架。模板方法模式可以让子类在不改已有算法结构的基础上,重新定义算法中的一些操作。
22. Visitor(访问者模式)
封装一些施加于某种数据结构之上的操作,访问者模式可以让你在不改变它所操作的对象的前提下定义新的操作。