学习设计模式之前,先来认真了解一下设计模式:
1、什么是模式?
每个模式描述了一个问题,该问题反复在我们的周围出现,每个模式给出了对该问题的核心解决方法,因此,人们可以反复使用给解决方法解决类似问题。
2、为什么学习模式?
模式帮助我们学习他们成功的经验,从而避免失误。
Design Pattern为软件设计总结了宝贵的经验,这些设计经验可以被重用,并不是简单的代码重用。
3、指导模式设计的三个重要概念:
(1)重用(reuse):是目标
两种重要的重用手段:Inheritance&composition
(2)接口与现实分离
接口保持不变,分离带来灵活性。
多态性(polymorphism)
(3)Decouple(解耦)
降低复杂性。
4、设计模式是什么?
设计模式是软件工程的基石,使代码编制真正工程化。设计模式反复被使用,因为它的代码可重用性,让代码更容易被他人理解、保证代码可靠性。
5、怎样实现代码的复用?
- 单一职原则:就一个类而言,应该仅有一个引起它变化的原则。
- 开放—封闭原则:对于扩展是开放的,对于更改是封闭的
- 里氏代换原则:子类型必须能够替换掉它们的父类型。
- 依赖倒转原则:针对接口编程,不要对实现编程
- 迪米特法则:也叫最少知识原则,强调了类之间的松耦合
- 合成/聚合复用原则:在一个新的对象里面使用一些已有的对戏那个,使之成为新对象的一部分,新的对象通过向这些对的委派达到复用已有功能的目的。尽量使用合成/聚合,尽量不要使用继承。
设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。
6、一些基本的设计模式
设计模式分为三种类型,共23类.
创建型模式(CreationalPatters):
- 工厂方法(FactoryMethod)用一个virtual method完成创建过程。
- 抽象工厂(AbstractFactory):提供一个创建一些类相关或相互依赖对象的接口,而无需指定它们具体的类。
- 单件(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 生成器(Builder):通过一个构造算法和builder接口把构造过程和客户隔离开。
- 原型(Prototype)建造者模式、工厂模式、原型模式。
结构型模式(Structuralpatterns):
- 装饰者(Decorator):动态的给一个对象添加一些额外的职责。就扩展功能而言,他比生成子类方式更为灵活
- 适配器(Adapter):将一个类的接口转换成客户希望的另外一个接口。
- 外观(Facade):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
- 组合(Composite):将对象组合成树形结构以表示“整体—部分”的层次结构。使得客户对单个对象和符合对象的使用具有一致性。
- 代理(Proxy):为其他对象提供一个代理以控制对这个对象的访问。
- 桥接(Build):将抽象部分与他的实现部分分离,使他们都可以独立地变化。
- 享元(Flyweight):运用共享技术有效地支持大量细粒度的对象。
行为模式(Behavioral Patterns):
- 策略(Strategy):定义一些类算法,把他们一个个封装起来,并且使他们可相互替换。
- 观察者(Observer):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
- 命令(Command):用对象封装命令,使得命令可以被传递、记录、排队等。
- 模板方法(TemplateMethod):在基类中定义算法的骨架,把某些细节延迟到子类中。
- 迭代器(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
- 状态(State):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
- 职责链(Chain of Responsibility):请求的处理过程,沿着链传递,decouple(解耦)发送方和接收方。
- 解释器(Interpreter):在类层次结构中,在特定环境的“interpret”过程
- 中介者(Mediator):用一个mediator来decouple各同等单元。
- 备忘录(Memo):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
- 访问者(VIsitor):把对一个结构模型的操作单独组织到一个类中。