设计模式
lostyears
这个作者很懒,什么都没留下…
展开
-
C++实现Structural - Decorator模式
假如我们需要为游戏开发坦克,除了各种不同型号的坦克(T50、T75和T90)外,我们还希望在不同场合中为其增加以下一种或多种功能,比如:- 红外夜视功能- 水陆两栖功能- 卫星定位功能等等,通常在不使用设计模式的情况下,大致的实现思路如下:1.先定义一个抽象坦克类class Tank{public:转载 2011-12-27 15:34:32 · 673 阅读 · 0 评论 -
C++实现Structural - Composite模式
在面向对象的系统中,我们经常会遇到一类具有“容器”特征的对象,即它们在充当对象的同时,又是其他对象的容器。举例:在操作系统中,文件的概念很广泛,其中文件可以是普通文件,也可以是目录(在Unix中,设备也是文件),目录中可以存放文件。Composite设计模式就是将“客户代码与复杂的对象容器结构”解耦,让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象(文件)一样来处理复杂转载 2011-12-27 14:03:20 · 976 阅读 · 0 评论 -
C++实现Behavioral - Chain Of Responsibility模式
在软件构建构成中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接收者,如果显示指定,将必不可少地带来请求发送者与接收者的紧密耦合。COR(Chain of Reposibility)设计模式可以使请求的发送者不需要指定具体的接收者,让请求的接收者自己在运行时决定来处理请求,从而使两者解耦。 “Avoid coupling the sender of a request to转载 2012-01-10 15:58:32 · 641 阅读 · 0 评论 -
C++实现Behavioral - Command模式
The COR (Chain Of Responsibility) pattern forwards requests along a chain of classes, but the Command pattern forwards a request only to a specific object. It encloses the request for a specific act转载 2012-01-14 16:32:44 · 723 阅读 · 0 评论 -
C++实现Behavioral - Template Method模式
在一个方法中定义一个算法的框架,并将该算法的某些步骤,延迟到子类实现。Template Method使得子类可以重新定义一个算法中的某些特定的步骤,而无需改变整个算法的结构。“Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets转载 2012-02-10 14:12:39 · 777 阅读 · 0 评论 -
C++实现Creational - Factory Method模式
设计模式的终极原理,本质上来说就是区分“变化的部分”和“稳定的部分”,并在此基础上,通过某种机制将此两者分离开来。此处所言之“变化”和“稳定”均为相对概念。在实现上,“稳定的部分”通常以抽象的形式出现,“变化的部分”通常以具体的类出现。 在Simple Factory模式中(详见http://patmusing.blog.163.com/blog/static/13583496020100转载 2011-11-29 21:20:14 · 634 阅读 · 0 评论 -
C++实现Creational - Abstract Factory模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。 举例说明:Abstract Factory模式说的是抽象工厂,抽象工厂中继承出了两个实际工厂,这两个实际工厂开始生产对象,两个工厂生产出来的对象风格不同,比如游戏开发中,有一个古典物品工厂,一个现代物品工厂,他们都派生于抽象工厂,都实现了创建计算工具这个方法,而古典工厂中的创建计算工具将返回一个算盘,而现代工厂返回的计算工转载 2011-12-07 18:32:19 · 547 阅读 · 0 评论 -
C++实现Structural - Bridge模式
Bridge模式又称为Handle/Body模式。 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。大部分创建型模式,就是为了解决如何向“客户程序”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求的改变而改变。 事实上,上面的假设是经常面临剧烈变化的对象(实现转载 2011-12-26 21:17:21 · 1199 阅读 · 0 评论 -
C++实现Structural - Proxy模式
Proxy also a.k.a. Surrogate对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而使得系统获得一种更为灵活、满足特定需求的解决方案。在面向对象的系统中,有些对象由于某种原因,比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等,直接访问会给使用者或者系统结构带来很多麻烦。 Proxy设计模式就是在不失去透明操作对象的同时,通过增加转载 2012-01-04 16:33:48 · 2639 阅读 · 0 评论 -
C++实现Behavioral - Interpreter模式
在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。 “Given a language, define a represention for its grammar along with an i转载 2012-02-06 16:53:08 · 1107 阅读 · 0 评论 -
C++实现Behavioral - Strategy模式
也称为Policy模式。 定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换。该模式使得算法可以独立于使用它的客户而变化。“Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independen转载 2012-02-10 14:04:26 · 532 阅读 · 0 评论 -
C++实现Behavioral - State模式
也称为Objects for States模式。 允许一个对象在其内部状态改变时改变其行为,从而使对象看起来似乎修改了类。“Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.” – GoF 一个应用的行转载 2012-02-09 17:38:07 · 867 阅读 · 0 评论 -
创建型模式总结
创建型模式,一共有5个,即Singleton, Factory Method (变种Simple Factory),Abstract Factory,Builder和Prototype。分别总结如下: 一、Singleton模式要点:1. 构造方法是private的;2. 有一个private的静态变量,其类型就是Singleton本转载 2011-12-24 14:26:00 · 524 阅读 · 0 评论 -
C++实现Structural - Adapter模式
Adapter模式也称为Wrapper模式。 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。Adapter设计模式就是为了应对这种“迁移的变化”,以使客户系统既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口。 事实上,Adapter设计模式的意图是:“Convert the int转载 2011-12-26 18:32:00 · 757 阅读 · 0 评论 -
C++实现Creational - Prototype模式
抽象不能依赖于实现细节,实现细节应该依赖于抽象。 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。Prototype设计模式,就是为了解决如何向“客户程序”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求的改变而改变。 Prototype转载 2011-12-24 14:07:06 · 754 阅读 · 0 评论 -
结构型模式总结
结构型模式,一共有7个,即Adapter, Bridge, Composite, Decorator, Façade, Flyweight和Proxy。分别总结如下: 一、Adapter模式Adapter模式有两种形式:对象适配器和类适配器。 1. 对象适配器上图为对象适配器UML类图。在对象适配器形式下,Adapter类中需要拥有一个Ad转载 2012-01-10 15:49:25 · 660 阅读 · 0 评论 -
C++实现Structural - Facade模式
假设我们需要开发一个坦克模拟系统用于模拟坦克在各种作战环境中的行为,其中坦克系统由引擎、车轮、控制器和火炮等各子系统构成。 A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和个子系统的演化,这种过多的耦合面临很多变化的挑战。Façade设计模式则简化外部客户程序和系统间的交互接口,将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦。转载 2011-12-29 10:25:18 · 526 阅读 · 0 评论 -
C++实现Behavioral - Iterator模式
“Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.”– GoF提供一种方法,以顺序访问一个聚合对象中的元素,而又不暴露该聚合对象之内部表示。 An aggregate object such转载 2012-02-06 17:16:57 · 1169 阅读 · 0 评论 -
C++实现Behavioral - Mediator模式
“Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction转载 2012-02-07 14:51:46 · 627 阅读 · 0 评论 -
C++实现Behavioral - Memento模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存其状态。这样以后就可以将该对象恢复到原先保存的状态。“Without violating encapsulation,capture and externalize an object’s internal state so that the object can be restored to this state late转载 2012-02-07 15:07:59 · 651 阅读 · 0 评论 -
C++实现Behavioral - Observer模式
也称为Dependents或Publish-Subscribe模式。 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。“Define a one-to-many dependency between objects so that when one object changes state, all its dependents转载 2012-02-08 18:13:18 · 616 阅读 · 0 评论 -
C++实现Structural - Flyweight模式
面向对象很好地解决了系统抽象性的问题,同时在大多数情况下,也不会损及系统的性能。但是,在某些特殊的应用中,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销。比如图形应用中的图元等对象、字处理应用中的字符对象等等。 采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价---主要指内存需求方面的代价。Flyweight(享元)设计模式可以在避转载 2012-01-04 15:33:38 · 597 阅读 · 0 评论 -
C++实现Behavioral - Visitor模式
表示一个作用于某对象结构中的各元素的操作。它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。“Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the class转载 2012-02-10 14:35:50 · 632 阅读 · 0 评论 -
C++实现Creational - Singleton模式
Singleton设计模式经常被大家谈及,很多人认为该模式很简单。的确,从纯粹的设计模式的角度来看,它并不复杂,但是从实现的角度来看,其实非常不简单,尤其是用C++去实现它的时候。 一、Java版本的Singleton模式实现我们不妨先看看在Java中实现Singleton模式的典型代码:// Singleton设计模式典型代码package Singleton;publi转载 2011-11-27 16:15:28 · 551 阅读 · 0 评论 -
C++实现Creational - Simple Factory模式
Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例,通常这个类都有一个公共的父类和一些公共的方法。需要说明的是Simple Factory模式并非GoF所定义的23个设计模式中的一员。 在国外,关于一个人的全名,通常有两种写法:一个人的姓名,如果中间有“,”,则姓在前,名在后;如果中间没有“,”,那么空格前为名,后为姓。比如:“Bill Gates”转载 2011-11-28 23:02:37 · 668 阅读 · 0 评论 -
C++实现Creational - Builder模式
在软件系统中,有时候面临着一个复杂对象的创建工作,该复杂对象通常由各个部分的子对象用一定的算法构成。由于需求的变化,这个复杂对象的各个子对象经常面临着剧烈的变化,但是将这些子对象组合在一起的算法是相对稳定的。 举例:假定一个可以放在桌子的相框有两部分组成,即一个框和一个支撑,而且这个组成是不变的。但是有不同风格的框和不同风格的支撑。Builder模式就是用来处理像相框这样复杂的对象的构转载 2011-12-07 19:43:37 · 709 阅读 · 0 评论 -
网络编程:Reactor与Proactor的概念
1、标准定义两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理转载 2015-04-06 11:02:26 · 621 阅读 · 0 评论