作者:徐建祥(netpirate@gmail.com)
时间:2006/09/22
来自:http://www.anymobile.org
1、何谓模式
“每个模式就是一条由三部分组成的规则,它表示了一个特定环境、一个问题和一个解决方案之间的关系。”--《建筑的永恒之道》(Christopher Alexander)
模式,就是对特定场景中,不断重复发生的问题,以及该问题的解决方案的整体抽象描述。
2、设计原则
²开闭原则(OCP,Open-Closed Principle)
是面向对象可复用的基石。模块、方法和类应该对扩展是开放的,而对更改是封闭的;对可变性进行封装。
²里氏代换原则(LSP,Liskov Substitution Principle)
是继承复用的基石。在任何父类出现的地方都可以用它的子类来替代。在实际设计类的阶层体系结构时,这是一条很重要的原则。
²依赖反转原则(DIP,Dependence Inversion Principle)
针对接口编程,要依赖于抽象,不要依赖于具体的实现,也叫控制反转,IoC。
²接口隔离原则(ISP,Interface Segregation Principle)
使用多个专门的接口总是比使用单一的总接口要好。
²合成/聚合复用原则(CARP,Composite or Aggregate Reuse Principle)
聚合:表示拥有或整体与部分的关系。
合成:更强的聚合关系。
尽量使用和成/聚合而不是继承来实现复用,“Has-A”替代“Is-A”(继承)。
²迪米特法则(LoD,Law of Demeter)
一个对象应当对其他对象尽可能少的了解。降低各个单元的耦合,提高系统的可维护性。
3、GOF设计模式
“设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。”--《Design Patterns》( Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides )
设计模式充分利用语言优势,站在更高的角度去审视我们的设计,但是不要为了模式而设计。
按照模式的目的和范围准则,GOF将众多的设计模式分为3类,共23个设计模式。
3.1创建型(Creational)
抽象工厂(Abstract Factory)O
生成器(Builder)O
工厂方法(Factory Method)O
原型(Prototype)O
单件(Singleton)O
3.2结构型(Structural)
适配器(Adapter)C O
桥接(Bridge)O
组合(Composite)O
装饰(Decorator)O
外观(Façade)O
享元(Flyweight)O
代理(Proxy)O
3.3行为型(Behavioral)
责任链(Chain Responsibility)O
命令(Command)O
解释器(Interpreter)C
迭代(Iterator)O
中介者(Mediator)O
备忘录(Memento)O
观察者(Observer)O
状态(State)O
策略(Strategy)O
模板方法(Template Method)C
访问者(Visitor)O
4、如何使用设计模式
1)学习模式,考虑设计模式是怎样解决问题以及相互的关联性;
2)寻找合适的对象,决定对象的粒度,制定对象接口,描述对象之间的关系;
3)使用设计模式进行优化,权衡性能和灵活性;
4)只有当模式提供的灵活性真正需要时,才有必要使用;
5)设计不能迁就模式,模式为设计服务。
参考:
《Design Patterns》Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
《Java与模式》阎宏