Design Patterns
文章平均质量分 88
yangchuankai
https://github.com/tigerguixh/QuickNews
展开
-
Factory Method模式讲解
Factory Method模式讲解零:FactoryMethod模式两个最重要的功能: 1)定义创建对象的接口,封装了对象的创建。 2)使得具体化类的工作延迟到了子类中。//抽象基类只是提供了对象创建的接口,其实现放在抽象基类的派生类中。一、解决的问题: 1、为提高内聚和松耦合,抽象出一些类的公共接口形原创 2014-11-29 17:00:15 · 806 阅读 · 0 评论 -
State模式
State模式一、效果: 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。二、适用性: 1、一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 2、一个操作中含有庞大的多分支条件语句,且这些分支依赖于该对象的状态。State模式将每一个条件分支放入一个独立的类中,这使原创 2014-12-01 00:00:56 · 856 阅读 · 0 评论 -
Memento模式
Memento模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。其实就是Undo操作,Memento模式可提供帮助。 如果用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。C++代码示例://memento.h#原创 2014-12-01 19:43:06 · 729 阅读 · 0 评论 -
Adapter模式
Adapter模式一、意图: 将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。二、举例: 在应用程序中已然设计好了接口,此时使用了第三方库来加快开发,但是我们设计的接口与三方库提供的接口不一致。为了使接口不兼容的类可以在一起工作,Adapter模式将一个原创 2014-11-30 08:57:52 · 719 阅读 · 0 评论 -
Decorator模式
Decorator模式 在OO设计和开发过程中,若我们需要为一个已经定义好的类添加新的操作,通常会定义一个新类来继承以定义好的类,这样会带来一个问题(见),通过继承还带来了系统的复杂性。 Decorator模式提供了一种给类添加操作的方法,不是通过继承实现,而是通过组合,使组件对客户透明。一、意图: 动态地给一个对象原创 2014-11-30 11:34:14 · 692 阅读 · 0 评论 -
Visitor模式
Visitor模式 Visitor模式作用是表示一个作用于某个对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 开发时,可能会经常移到需求变更:我们做好的一个设计、实现了一个系统原型,客户又有了新的需求,因此不得不去更该已有的设计,最常见的解决方案就是给已经设计好的类添加I新的方法去实原创 2014-12-02 13:52:33 · 858 阅读 · 2 评论 -
Iterator模式
Iterator模式 Iterator模式可以提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。C++代码示例://aggregate.h#ifndef AGGREGATE_H#define AGGREGATE_Hclass Iterator;typedef int Objec原创 2014-12-03 11:42:34 · 658 阅读 · 0 评论 -
Bridge模式
Bridge模式 总结面向对象实际上就六个字:高聚合,松耦合。666。一、意图: 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 note: 这里的"实现"不是指的继承基类实现基类接口,而是通过对象组合实现用户的需求。 二、动机: 考虑在一个用户界面工具箱中,一个可移植的Window抽象部分的实原创 2014-11-30 00:19:07 · 861 阅读 · 0 评论 -
Chain of Responsibility模式
Chain of Responsibility模式 熟悉MFC的朋友都知道,MFC是"基于消息,事件驱动"滴,它的向上传递消息的机制跟职责链的思想是相同的,其实Qt中的touchEvent也是这样处理的。 职责链模式的最大一个优点就是降低了系统的耦合性,请求的发送者完全不知道该请求会被哪个应答对象处理。C++代码示例:原创 2014-12-03 14:06:07 · 677 阅读 · 0 评论 -
Interpreter模式
Interpreter模式 给定一个语言,定义它的语法的一种表示(如一些应用提供了内建的脚本或宏来让用户可以定义他们自己能够在系统中进行的操作),并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 一个简单常用的例子是搜索匹配一个模式的字符串。与其为每一个模式都构造一个特定的算法,不如使用一种通用的搜索算法来解释执行原创 2014-12-03 13:08:33 · 801 阅读 · 0 评论 -
Proxy模式
Proxy模式Intention: 为其他对象提供一种代理以控制对这个对象的访问。When: 1、创建开销大的对象时,比如显示一幅大的图片,我们将这个创建过程交给Proxy去完成(Virtual Proxy)。 2、为网络上的对象创建一个局部的本地代理,比如要操作一个网络上的一个对象(特别是网络性能不好时),可将这个操纵原创 2014-11-30 18:32:00 · 712 阅读 · 0 评论 -
Strategy模式
Strategy模式 Strategy模式和Template模式要解决的问题是相同的,都是为了实现业务逻辑具体实现和抽象接口之间的解耦。Strategy模式将逻辑算法封装到一个类中,通过组合的方式将具体算法的实现放在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。Strategy模式和Template模式实际上是实现原创 2014-11-30 23:37:54 · 666 阅读 · 0 评论 -
Prototype模式
Prototype模式一、意图: 用原型实例指定创建对象的种类,并且通过拷贝这些原则创建新的对象。(复制构造函数)二、C++示例:#include using namespace std;class Prototype{public: virtual ~Prototype(); virtual Proto原创 2014-11-29 22:43:09 · 799 阅读 · 0 评论 -
设计模式总览
设计模式总览 设计模式一般来说有23中,可分为3类:创建性模式、结构性模式、行为模式。★创建型模式包括:FactoryMethod模式、AbstractFactory模式、Singleton模式、Builder模式、Prototype模式.★结构型模式包括:Bridge模式、Adapter模式、Decorator模式、Composite模式原创 2014-11-29 14:23:05 · 773 阅读 · 0 评论 -
Composite模式
Composite模式一、遇到的问题: 开发中,经常可能要递归构建树状的组合结构,Composite模式可助你。二、意图: 将对象组合成树形结构以表示"部分-整体"的层次结构,Composite使得用户对单个对象和组合对象的使用具有一致性。三、C++代码示例://component.h#ifndef COM原创 2014-11-30 12:57:18 · 759 阅读 · 0 评论 -
Flyweight模式
Flyweight模式一、意图: 运用共享技术有效地支持大量细粒度的对象。二、说明: Flyweight模式对那些通常因为数量太大而难以用对象来表示的概念或实体进行建模。三、举例: 文档编辑器,可以为每个字母创建一个Flyweight。每个享元存储一个字符代码,但它在文档中的位置和排版风格可以在字符出现时原创 2014-11-30 14:44:31 · 641 阅读 · 0 评论 -
Builder模式
Builder模式一、意图: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。二、通俗解释: 大学教育有四个学年,每个学年可作为教育的一个构建过程,每个人经过四年得到的结果不一样,因为在这四个阶段的构建中引入了不同的参数(如个人的奋斗和机遇等)。三、解决的问题: 当我们要创建的对象很原创 2014-11-29 21:47:59 · 857 阅读 · 0 评论 -
Facade模式
Facade模式Intention: 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。When: 将一个系统划分为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是是子系统之间的通信和相互依赖关系达到最小。达到该目标的途径之一就是引入一个外观对象,它为子系统原创 2014-11-30 18:05:25 · 699 阅读 · 0 评论 -
AbstractFactory模式讲解
AbstractFactory模式零、意图: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。一、解决的问题: 在一款游戏中,怪物都是分等级的,要创建千万个怪物实例,但是要保证初级的怪物类不能创建高级的。 支持多种视感标准的用户界面工具包。二、动机: 以工具包为例:为解决需求可以定义一个原创 2014-11-29 18:57:06 · 730 阅读 · 0 评论 -
Observer模式
Observer模式一、目的: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。二、举例: 对同一组数据进行统计分析时,我们希望能够提供多种形式的表示(eg: 表格,柱状图,饼图),这些表示都依赖于同一组数据,当这组数据改变时,所有的统计表示都同时改变。三、适用性原创 2014-12-01 17:22:27 · 749 阅读 · 0 评论 -
Singleton模式
Singleton模式一、要解决的问题: 怎样创建一个唯一的变量(对象)?二、解决: 通过维护一个static的成员变量来记录这个唯一的对象实例,通过提供一个static的接口来获得这个唯一的实例。三、C++实例://singleton.h#ifndef SINGLETON_H#define SING原创 2014-11-29 19:47:23 · 615 阅读 · 0 评论 -
Template Method模式
Template Method模式Intention: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。When: 对于一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架是相同的,TemplateMe原创 2014-11-30 21:20:21 · 730 阅读 · 0 评论 -
Mediator模式
Mediator模式 Mediator模式是一种很有用的模式,它通过将对象间的通信封装到一个类中,将多对多的通信转化为一对多的通信,降低了系统的复杂性。 面向对象设计激励将行为分布到各个对象中,但这种分布可能会导致对象间有许多连接,在最坏的情况下,每一个对象都知道原创 2014-12-01 22:02:43 · 802 阅读 · 0 评论 -
Command模式
Command模式介绍: Command模式通过将请求封装到一个对象(Command)中,并将请求的接收者存放到具体的ConcreteCommand类(Receiver)中,从而实现调用操作的对象和操作的具体实现之间的解耦。 Command类中一般只是一些接口的集合,并不包含任何的数据属性(当然,也可有)。C+原创 2014-12-02 10:29:07 · 1663 阅读 · 0 评论