
Design Patterns
普通网友
这个作者很懒,什么都没留下…
展开
-
Chain of Responsibility Pattern
MFC 提供了消息的处理的链式处理策略基本就是使用这种模式。participants The classes and/or objects participating in this pattern are: Handler (Approver) defines an interface for handling the转载 2007-05-18 14:00:00 · 465 阅读 · 0 评论 -
Prototype
关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的 3 根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要)。Prototype 模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。 Prototype 模式通过复制原型(Prototype)而获得新对象创建的功能,这里 Prototype 本身转载 2007-05-18 13:37:00 · 555 阅读 · 2 评论 -
Abstract Factory
e.g. For example, there is a program to make out animals world in different continents. Different continent has its owner different carnivores and Herbivores. So we can use abstract facto转载 2007-05-18 13:18:00 · 397 阅读 · 0 评论 -
Mediator: Defines simplified communication between classes
Mediator: Defines simplified communication between classes 在面向对象系统的设计和开发过程中,对象之间的交互和通信是最为常见的情况,因为对象间的交互本身就是一种通信,在系统比较小的时候,可能对象间的通信不是很多、对象也比较少,我们可以直接硬编码到各个对象的方法中。但是当系统规模变大,对象的量变引起转载 2007-05-18 14:11:00 · 509 阅读 · 0 评论 -
Interpreter pattern
Interpreter: A way to include language elements in a program Use to implement compile 一些应用提供了内建(Build-In)的脚本或者宏语言来让用户可以定义他们能够在系统中进行的操作。Interpreter 模式的目的就是使用一个解释器为用户提供一个一门定义语言转载 2007-05-18 14:03:00 · 653 阅读 · 0 评论 -
Flyweight pattern
在面向对象系统的设计何实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为没有字母创建一个对象的话,系统可能会因为大量的对象而造成存储开销的浪费。例如一个字母“a”在文档中出现了100000 次,而实际上我们可以让这一万个字母“a”共享一转载 2007-05-18 13:55:00 · 621 阅读 · 0 评论 -
Facade Pattern
举一个生活中的小例子,大凡开过学或者毕过业的都会体会到这样一种郁闷:你要去 n个地方办理 n 个手续(现在大学合并后就更加麻烦,因为可能那 n 个地方都隔的比较远)。但是实际上我们需要的就是一个最后一道手续的证明而已,对于前面的手续是怎么办的、到什么地方去办理我们都不感兴趣。 实际上在软件系统开发中也经常回会遇到这样的情况,可能你实现了一些接口(模块),而这些接口(模块转载 2007-05-18 13:53:00 · 527 阅读 · 0 评论 -
Builder Pattern
Builder pattern uses to create a product which contains variant parts. E.g. Vehicles have Frame, Engine, Wheels and doors, Any different vehicles implements its builder functions to create different转载 2007-05-18 13:21:00 · 542 阅读 · 0 评论 -
Template (*) (medium )
participants The classes and/or objects participating in this pattern are: AbstractClass (DataObject) defines abstract primitive operations that concrete subclasses def转载 2007-05-18 14:19:00 · 435 阅读 · 0 评论 -
Observer (***) high
Observer: A way of notifying change to a number of classes Define a one-to-many dependency between objects so转载 2007-05-18 14:15:00 · 449 阅读 · 0 评论 -
Command Pattern
Command: Encapsulate a command request as an object Command 模式通过将请求封装到一个对象(Command)中,并将请求的接受者存放到具体的 ConcreteCommand 类中(Receiver)中,从而实现调用操作的对象和操作的具体实现者之间的解耦。 This real-world code dem转载 2007-05-18 14:01:00 · 630 阅读 · 0 评论 -
Proxy pattern
至少在以下集中情况下可以用 Proxy模式解决问题: 1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成,GoF 称之为虚代理(Virtual Proxy); 2)为网络上的对象创建一个局部的本 比如要操作一个网络上的一个对象(网络性能不好的时候,问题尤其突出),我们将这个操纵的过程交给一个代理去完成,GoF 称之为远程代理(Remote P转载 2007-05-18 13:57:00 · 474 阅读 · 0 评论 -
Decorator Pattern
在 OO 设计和开发过程,可能会经常遇到以下的情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会给定义一个新类继承自定义好的类,这样会带来一个问题(将在本 的讨论中给出)。通过继承的方式解决这样的情况还带来了系统的复杂性,因为继承的深度会变得很深。 而 Decorator 提供了一种给类增加职责的方法,不是通过继承实现的,而是通过组合。有关这些转载 2007-05-18 13:52:00 · 525 阅读 · 0 评论 -
Bridge
Using to separate the abstractor and implementor. Logic and data to separate. This real-world code demonstrates the Bridge pattern in which a BusinessObject abstraction is decoupled from the im转载 2007-05-18 13:49:00 · 426 阅读 · 0 评论 -
Factory Pattern
This real-world code demonstrates the Factory method offering flexibility in creating different documents. The derived Document classes Report and Resume instantiate extended versions of the Document转载 2007-05-18 13:23:00 · 479 阅读 · 0 评论 -
Strategy (***) (medium high)
Strategy: Encapsulates an algorithm inside a class Strategy模式和 Template模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。Strategy模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口转载 2007-05-18 14:18:00 · 397 阅读 · 0 评论 -
State(***) (medium )
State: Alter an objects behavior when its state changes 每个人、事物在不同的状态下会有不同表现(动作),而一个状态又会在不同的表现下转移到下一个不同的状态(State)。最简单的一个生活中的例子就是:地铁入口处,如果你放入正确的地铁票,门就会打开让你通过。在出口处也是验票,如果正确你就可以 ok,否则就不让你通过(如转载 2007-05-18 14:17:00 · 487 阅读 · 0 评论 -
Memento (**) ( low )
Memento: Capture and restore an objects internal state 问题 没有人想犯错误,但是没有人能够不犯错误。犯了错误一般 却很难改正(恢复)。世界上没有后悔药,但是我们在进行软件系统的设计时候是要给用户后悔的权利(实际上可能也是用户要求的权利:)),我们对一些关键性的操作肯定需要提供诸如撤销(Undo)的操作。那这个后悔药就转载 2007-05-18 14:13:00 · 438 阅读 · 0 评论 -
Adapter
在 Adapter模式的两种模式中,有一个很重要的概念就是接口继承和实现继承的区别和联系。接口继承和实现继承是面向对象领域的两个重要的概念,接口继承指的是通过继承,子类获得了父类的接口,而实现继承指的是通过继承子类获得了父类的实现(并不统共接口)。在 C++中的 public继承既是接口继承又是实现继承,因为子类在继承了父类后既可以对外提供父类中的接口操作,又可以获得父类的转载 2007-05-18 13:42:00 · 421 阅读 · 0 评论