所有的设计模式都在围绕着“高内聚,低耦合,提高复用,提高可维护性”
三大类模式:创建型、结构型、行为型
1.创建型:
1.1工厂模式(Factory)
将定义一个用于创建对象的接口,让子类决定实例化哪一个类。
1.2抽象工厂模式(Abstract Factory)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
1.3建造者模式(Builder)
构建过程和表示过程分离,达到隐藏产品组装的过程。
1.4单例模式(singleton)
判断对象是否为空,为空则创建一个。
1.5原型模式(Prototype)
深拷贝(Clone)
2.结构型:
2.1适配器模式(Adapter)
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
2.2桥接模式(Bridge)
动作和执行者(抽象)分离,都可以独立变化
2.3组合模式(Component)
树形结构,对“单个对象”或“组合对象”使用具有一致性。
2.4装饰模式(Decorator)
动态添加行为,通过传对象引用的方式
2.5享元模式(Flyweight)
大量轻量级的组件,达到复用的效果
2.6外观模式(Façade)
向外提供一个统一的接口,对内部进行了封装。
2.7代理模式 (Proxy)
为某个对象提供代理,从而实现“访问控制”
3.行为型:
3.1责任链模式(Chain of Responsibility)
使多个对象都有机会处理请求,从而避免了发送者和接受者之间的耦合关系。将接受者对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
3.2命令模式(Command)
将一个请求(命令)封装为一个对象,从而使你可用不同的请求对客户进行参数化
3.3解释器模式(Interpreter)
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子
3.4迭代器模式(Iterator)
访问时隐藏对象内部特征
3.5中介者模式 (Mediator)
不同对象间,通过中介者来实现访问。e.g. 联合国。
3.6忘录模式(Memento)
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
3.7观察者模式(Observer)
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
3.8状态模式(State)
将状态定义为对象,行为随着状态的改变而改变。为了消除庞大的条件分支,简化逻辑。
3.9策略模式(Strategy)
实现表现层和业务逻辑层(处理层)的分离,定义一套“算法家族”,使“算法”(策略)的改变不影响使用者,即独立于使用者。
3.10模版模式(Template)
在超类中定义算法的骨架(框架),目的是将重复操作放在超类,继承的时候可以提高复用性,减少冗余。
3.11访问者模式(Visitor)
双分派(二次分派),实现类Vistor(处理类)和Element(数据类)的分离,从而达到在不改变各元素的类的前提下定义作用于这些元素的新操作。 适用数据结构相对稳定的情况。
4.一些OO设计原则
4.1.依赖倒转原则
高层模块不应该依赖底层模块。两个都应该依赖抽象
抽象不应该依赖细节,细节应该依赖抽象。
说白了,应该针对接口编程,不要对实现编程。
4.2.开放封闭原则
对拓展开放,对修改封闭
4.3.迪米特法则
如果两个类不必彼此直接通信,那么就不让这两个类之间发生直接的相互作用(调用),如果其中一个类要调用另一个类的某一个方法的话,可以通过第三者来转发这个调用。
迪米特法则根本思想,是强调类之间的松耦合
4.4.里式代换原则
子类型必须能够替换掉他们的父类型。
说明:
1. 每种设计模式下的简短介绍,主要是用来提示自己的一些要点。
2. 5+7+11=23中设计模式,虽多,但常用的并不多。我应该会在后面的博客中更新常用设计模式的详细介绍。
3.主要参考《设计模式-GoF》,《大话设计模式》,李刚整理的设计模式chm版。
资源连接如下:
http://download.csdn.net/detail/csp277/9149951