学习设计模式有个多月的时间了,回想自己当初学习设计模式时的感受就是——蒙圈!起初自己别提有多么难受了,代码看不懂、意思不明白、完全是在迷宫中游荡的感觉。如今自己已将设计模式学习完毕,也就在此时明白了设计模式是干什么的(ps:也许是因为自己比较死板,总是觉得一本书应该有模有样地去讲述知识,对于《大话设计模式》并不能够深层次去理解,所以就会有了自己的出感受吧!)。
模式、模式,顾名思义就是一种体系、一种样式,干什么事都应该有它的准则、想法或者说是策划,只有有了这些强有力的硬性指标做保障,才能保证事情有方向、有计划、不出现严重偏差!而如今学习的设计模式可以说是软件设计中成千上万的程序元老们智慧的结晶,他们将自己软件设计的经验、智慧、方法以这种标准留给我们,使我们的软件设计更有章可循、有法可依!保证了自己软件的质量和性能,所以说学好设计模式对于我们开发软件是非常重要的。
按照各种模式适用方向的不同,可以将23种设计模式分为创建型模式、机构型模式和行为型模式,
**创建型模式包括单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Fatory)、建造者模式(Builder)、原型模式(Prototype),它隐藏了类的实例是如何被创建和放在一起的,整个系统关于这些对象所知道的只是抽象类所定义的接口。创建型模式在创建了什么、谁创建它、它是怎样被创建的,以及何时创建这些方面提供了很大的灵活性。当一个系统应该独立于它的产品创建、构成和表示时,应该考虑用创建型模式!我想这应是每一位软件设计者都应该谨记的条例吧。
**结构型模式包括适配器模式(Adapter)、装饰模式(Decorator)、桥接模式(Bridge)、组合模式(Composite)、享元模式(Flyweight)、代理模式(Proxy)、外观模式(Facade),它是从软件结构方面对软件系统做一个优化,包括如何处理变化、如何处理整体与部分之间的关系、如何实现软件的复用、如何减少内存的开销以及处理类与类之间的联系,降低耦合!结构型模式从整体上对程序的耦合问题做一些处理。
**行为型模式包括观察者模式(Observer)、模板方法模式(TemplateMethod)、命令模式(Command)、状态模式(State)、职责链模式(Chain of Responsibility)、解释器模式(interpreter)、中介者模式(Mediator)、访问者模式(Visitor)、策略模式(Strategy)、备忘录模式(Memento)、迭代器模式(Iterator)是指适用于某些具体的行为的模式,每种模式都有其自己的优势和特点。
在这里说一说部分模式之间存在的联系(对应图中关联的虚线):
模式(GOF) |
共性 |
特性 |
工厂方法模式(Factory Method) |
它们都是工厂类中典型的例子 |
定义了一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类 |
抽象工厂模式(Abstraction Factory) |
提供了一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 |
|
原型模式(Prototype) |
他们都用到了克隆的方法,使代码具有更好的复用性 |
保证一个类仅有一个实例,并提供一个访问它的全局访问点 |
模板模式(TemplateMethod) |
定义了一个操作的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 |
|
适配器模式(Adapter) |
他们都是将只有某个领域可以使用的内容通过转换以后使其可以在另一个领域使用。 |
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作了 |
解释器模式(Interpreter) |
通过给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子 |
|
命令模式(Command) |
将发送者和具体实现者分离, |
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;可以对请求或记录请求日志,以及支持可撤销的操作 |
职责链模式(Chain Of Responsibility) |
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 |
如今回顾一下大话模式,没有很难的逻辑,只是将一种编程的思路,或者说是思想告诉了我们,学习过后就需要我们用到自己的系统当中,提高系统的性能。所以,重在应用吧!