设计模式的理解
2004-11-04 08:17
459 查看
面向对象指使用离散的对象来构建软件系统;设计模式利用了对象的继承、组合和代理(delegation),在较OOP高的层次上考虑问题。尤其是使用代理来对任何不稳定或不确定的方面,如状态、对象的创建、应用平台等等,进行封装,从而保证了源代码的重用和设计的稳定。实际上可以理解成为是OOP中虚函数、多态概念的延伸。即OOP中的虚函数和多态实现的是方法、对象行为上的多态,而设计模式的则对创建、结构和高层次的行为进行了多态。
Creation Pattern
当系统演化成依赖于对象的组合、聚集时,创建性模式带来了更大的灵活性。
Abstract Factory:抽象工厂是创建对象族。它能确保被创建对象家族的一致性,和对象家族发生改变的灵活性,在跨平台的设计中可以得到应用。
Prototype:一种将对象生成的责任代理给自己的模式。它与C++中的拷贝函数不同,C++不支持拷贝函数的多态,即当对象使用基类的指针进行引用时,无法按照子类进行拷贝,会造成切割。Prototype在Java中得到大量的应用。
Builder:侧重点在于对象创建的过程中,避免在code中出现大量的硬代码。当被创建对象结构发生改变时。避免了对散布在程序中大量new语句的修改。
Factory Method:实现了生成对象不确定时的解决方案。实际上在C++和Java中,对于虚函数的理解比较容易,即某个方法不确定时,使用虚函数来声明,而将具体的实现交给子类。Factory Method它实现了对象创建时的多态。
Singleton类似于一种技巧,利用OOP的技术,强制实现了有限、定量对象的产生。
对比:Factory Method实现了创建的多态;Prototype实现了拷贝的多态;Builder实现了对象创建过程的多态。
Structural Pattern
结构性模式关注于如何将类和对象组成的更大结构,它带来了对象组合时的灵活性。
Composite:适用于表达整体-部分关系,可以忽略单个对象和合成对象之间的差别。它实际采用的是一种树状结构。
Decorator:与继承不同,用代理的方式实现了多态,可以避免大量子类的派生。相应的它适用于链状和树状的结构。
Proxy:结构与Decorator非常相似,它们的侧重点不同,一种是修改对象的行为,另一种控制访问。
Bridge:实现了抽象和实现之间的永久绑定,可以理解为在基于已有的构件上设计时,而且已有的设计可能会发生变化。它往往与Abstract Factory共同用于跨平台设计的情况。
Façade:用于对子系统提供统一的接口。
Behavioral Pattern
行为模式涉及到算法和对象间的职责和分配。行为模式描述了通信方式、控制方法以及对象之间的联系方式。
Chain of responsibility:用于链状结构,将职责沿链进行传递,不显示指定责任的承担人,由对象自己实现责任的实施。
Command:将某个职责封装成对象,可以与memento结合在一起用于Undo。
Iterator:大量应用于算法库中,对遍历操作进行封装。
Mediator:通过中介对象的引入将网状的结构变成以中介者为中心的星形结构,从而保证了对象结构上的稳定,即不会因为新对象的引入造成大量类中指针的修改。
Observer:经典MVC模式的变形,与Mediator的结构类似,在对象级别是星形结构。它们均是将网状结构变成星形结构,但侧重点不同。
State:经典方法状态机的OO实现,可大量应用于控制密集型的系统中。
Strategy:将算法进行封装。适合应用于对效率要求较高的软件中,为效率的提高预留接口。
Visitor:在对象级别中实际为矩阵结构,与Abstract Factory类似。它们以采用对象的代理,为矩阵的一个维度提供灵活性和一致性。
Creation Pattern
当系统演化成依赖于对象的组合、聚集时,创建性模式带来了更大的灵活性。
Abstract Factory:抽象工厂是创建对象族。它能确保被创建对象家族的一致性,和对象家族发生改变的灵活性,在跨平台的设计中可以得到应用。
Prototype:一种将对象生成的责任代理给自己的模式。它与C++中的拷贝函数不同,C++不支持拷贝函数的多态,即当对象使用基类的指针进行引用时,无法按照子类进行拷贝,会造成切割。Prototype在Java中得到大量的应用。
Builder:侧重点在于对象创建的过程中,避免在code中出现大量的硬代码。当被创建对象结构发生改变时。避免了对散布在程序中大量new语句的修改。
Factory Method:实现了生成对象不确定时的解决方案。实际上在C++和Java中,对于虚函数的理解比较容易,即某个方法不确定时,使用虚函数来声明,而将具体的实现交给子类。Factory Method它实现了对象创建时的多态。
Singleton类似于一种技巧,利用OOP的技术,强制实现了有限、定量对象的产生。
对比:Factory Method实现了创建的多态;Prototype实现了拷贝的多态;Builder实现了对象创建过程的多态。
Structural Pattern
结构性模式关注于如何将类和对象组成的更大结构,它带来了对象组合时的灵活性。
Composite:适用于表达整体-部分关系,可以忽略单个对象和合成对象之间的差别。它实际采用的是一种树状结构。
Decorator:与继承不同,用代理的方式实现了多态,可以避免大量子类的派生。相应的它适用于链状和树状的结构。
Proxy:结构与Decorator非常相似,它们的侧重点不同,一种是修改对象的行为,另一种控制访问。
Bridge:实现了抽象和实现之间的永久绑定,可以理解为在基于已有的构件上设计时,而且已有的设计可能会发生变化。它往往与Abstract Factory共同用于跨平台设计的情况。
Façade:用于对子系统提供统一的接口。
Behavioral Pattern
行为模式涉及到算法和对象间的职责和分配。行为模式描述了通信方式、控制方法以及对象之间的联系方式。
Chain of responsibility:用于链状结构,将职责沿链进行传递,不显示指定责任的承担人,由对象自己实现责任的实施。
Command:将某个职责封装成对象,可以与memento结合在一起用于Undo。
Iterator:大量应用于算法库中,对遍历操作进行封装。
Mediator:通过中介对象的引入将网状的结构变成以中介者为中心的星形结构,从而保证了对象结构上的稳定,即不会因为新对象的引入造成大量类中指针的修改。
Observer:经典MVC模式的变形,与Mediator的结构类似,在对象级别是星形结构。它们均是将网状结构变成星形结构,但侧重点不同。
State:经典方法状态机的OO实现,可大量应用于控制密集型的系统中。
Strategy:将算法进行封装。适合应用于对效率要求较高的软件中,为效率的提高预留接口。
Visitor:在对象级别中实际为矩阵结构,与Abstract Factory类似。它们以采用对象的代理,为矩阵的一个维度提供灵活性和一致性。
相关文章推荐
- 深入理解JavaScript系列(32):设计模式之观察者模式
- GOF设计模式-创建型模式理解与思索(三)(Prototype分析)
- 设计模式理解
- 从模式角度理解Android架构设计-Facade模式
- 理解MVC,MVP和MVVM设计模式
- IOC设计模式的理解
- 杂记:设计模式的适用性,设计模式与类库框的不同.各种理解误区.学习方法论..
- 简单理解设计模式之装饰者模式
- 我对设计模式的理解(一)
- 设计模式,如何理解?
- 深入理解JavaScript系列(31):设计模式之代理模式
- 理解单例设计模式(饿汉式,懒汉式,静态内部类,枚举,双重校验锁)
- 理解补充常见设计模式
- GOF23设计模式之观察者模式的理解与实现2(使用java自带的观察者类和接口)
- 深入理解JavaScript系列(29):设计模式之装饰者模式详解
- 深入理解JavaScript系列(41):设计模式之模板方法
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- 深入理解JavaScript系列(29):设计模式之装饰者模式
- 我所理解的设计模式(C++实现)——组合模式(Composite Pattern)
- 深入理解JavaScript系列(41):设计模式之模板方法