
设计模式
shiwazone
这个作者很懒,什么都没留下…
展开
-
设计模式C++实现一:简单工厂模式
参考大话设计模式和网上的一些资料,自己编写下一些简单的设计模式,让自己了解这些设计模式的妙处!原创 2015-05-09 15:08:56 · 901 阅读 · 0 评论 -
设计模式C++实现十三:适配器模式
适配器模式(Adapter):将一个类的接口转换成客户希望的另一个接口。使得原本接口不兼容而不能在一个工作的那些类可以一起工作。使用场景:当系统的数据和行为都正确,但接口不同时,我们可以考虑使用适配器模式来匹配接口。主要应用在希望复用一些存在的类,但是接口又和复用环境要去不同时使用。#ifndef ADAPTER_H#define ADAPTTE_H#include#include原创 2015-05-13 10:45:11 · 701 阅读 · 0 评论 -
设计模式C++实现十四:备忘录模式
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到之前保存的状态。备忘录模式比较适用于功能较复杂的,但需要维护和记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分。如果某个系统中使用命令模式时,需要实现命令的撤销功能,那么备忘录模式可以存储可撤销操作的状态。#ifndef MEMENTO_H#d原创 2015-05-13 11:29:16 · 804 阅读 · 0 评论 -
设计模式C++实现十六:迭代器模式
迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。使用场景:当我们需要访问一个聚集对象时,而且不管这些对象是什么都需要遍历的时候,我们可以考虑使用迭代器模式。如果我们需要对聚集有多种方式遍历时,也可以考虑使用迭代器模式。迭代器一般需要提供开始,下一个,是否结束,当前项的内容等方法。#ifndef ITERATOR_H#define原创 2015-05-14 13:08:17 · 857 阅读 · 0 评论 -
设计模式C++实现十五:组合模式
组合模式(Composite):将对象组合成树的结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。树可能有无数的分支,只有反复使用Composite就可以实现树状结构了。在Component中声明所有用来管理子对象的方法,其中包括Add,Remove方法,这样实现Component接口的所有子类都具备Add,Remove方法。这样做的好处就是叶结点和枝节点相原创 2015-05-14 09:41:18 · 1202 阅读 · 0 评论 -
设计模式C++实现二十三:访问者模式
访问者模式(Visitor):表示一个作用于某个对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相当自由地演化。访问者模式的目的是要把处理从数据结构分离出来。很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法原创 2015-05-18 12:29:43 · 832 阅读 · 0 评论 -
设计模式C++实现二十一:中介者模式
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者是各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现多对多交互复杂的对象群是,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。优点:Mediator的出现减少了各个colleague的耦合,使得可以独立地改变和原创 2015-05-18 12:10:08 · 1081 阅读 · 0 评论 -
设计模式C++实现二十二:享元模式
享元模式(flyweight):运用共享技术有效地支持大量细粒度的对象。享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,有时就能够受大幅度地减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时将它们传过来,就可以通过共享大幅度地减少单个实例的数目。使用场景:如果一个应用程序使原创 2015-05-18 12:21:24 · 775 阅读 · 0 评论 -
设计模式C++实现十七:单例模式
学习单例模式的之前,我们必须要了解static的相关用法。我通过查阅相关资料和博客,有下面一个总结文章。http://blog.youkuaiyun.com/shiwazone/article/details/45815615。单例模式(Singleton):保证一个类仅有一个实例,并且提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办原创 2015-05-18 10:07:11 · 857 阅读 · 0 评论 -
设计模式C++实现十八:桥接模式
聚合(aggregation)表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不一定是A对象的一部分。例如大雁是群居动物,所以每只大雁都是属于一个雁群,一个雁群可以有多只大雁,所以大雁和雁群是聚合关系。合成(composition)则是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期是相同的。大雁和翅膀就是整体和部分的关系,并且他们的生命周期是相同的,所原创 2015-05-18 10:45:05 · 693 阅读 · 0 评论 -
设计模式C++实现十九:命令模式
命令模式(Command):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。命令模式的优点:第一、能较容易的设计一个命令队列。第二、在需要的情况下,可用较容易地将命令计入日志。第三、允许接受请求的一方决定是否需要否决请求。第四、可用容易地实现对请求的撤销和重做。第五、由于加进新的具体命令类不影响其他的类,因原创 2015-05-18 11:15:44 · 772 阅读 · 0 评论 -
设计模式C++实现十二:状态模式
状态模式(state):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式国语复杂时的情况。把状态的判断逻辑转移到不同状态的一系列类中,可以把复杂的判断逻辑简化。原创 2015-05-13 09:41:01 · 716 阅读 · 0 评论 -
设计模式C++实现十一:抽象工厂模式
抽象工厂模式(Abstract Factory):提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。优点:便于交换产品系统,由于具体工厂类,在一个应用中只需要初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,只需要改变具体工厂即可以使用不同的产品配置。它让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操作实例,产品的具体类名也被具体工厂实现分离,原创 2015-05-12 22:22:00 · 1059 阅读 · 0 评论 -
设计模式的六大原则
转自:http://www.uml.org.cn/sjms/201211023.asp#4设计模式六大原则(1):单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职转载 2015-05-09 18:22:38 · 629 阅读 · 0 评论 -
设计模式C++实现二:策略模式
策略模式(strategy): 定义算法家族,分别封装起来,让这些算法直接可以相互替换,我们可以自由添加或者修改算法而不会影响客户.优点:简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。如果我们在客户端为了判断使用哪个算法而使用switch语句来分析,我们可以使用策略模式把这个判断的过程隐藏到后台,把每个算法用一个strategy类实现。这样就简化了客户端的代码,也隐原创 2015-05-09 16:41:59 · 824 阅读 · 0 评论 -
设计模式C++实现三:装饰模式
装饰模式(decorator ):动态的给一个对象添加一些额外的职责,就增加的功能来说,装饰模式比生成子类更为灵活。使用情况:当系统需要新功能的时候,是想旧的类中添加新的代码,这些新的代码通常装饰了原有类的核心职责或者主要行为,它们在主类中加入了新的字段,新的方法新的逻辑,从而增加了主类的复杂度。而这些新加入的东西仅仅是为了满足一些只有在特定情况下才会执行的特殊行为的需要。装饰模式可以把每个要原创 2015-05-10 17:34:12 · 635 阅读 · 0 评论 -
设计模式C++实现四:代理模式
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。应用场景:1.远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。 2.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。例如一个很大的HTML网页的打开,我们看到图片是一张一张下载后才能看到,而未打开的图片框,就是通过虚拟代理来替原创 2015-05-10 22:45:23 · 652 阅读 · 0 评论 -
设计模式C++实现五:工厂方法模式
工厂方法模式(Factory Method):定义一个用于封建对象的接口,让子类觉得史丽华哪一个类,工厂方法使一个类的实例化延迟到其子类。简单工厂模式优点 :工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。但是因为我们需要根据客户端的输入来修实例化类,如果我们要增加类的话,我们需要修改工厂类方法,把该类加入其中,这意味着我们不但对扩原创 2015-05-11 12:09:33 · 784 阅读 · 0 评论 -
设计模式C++实现七:模版方法模式
模版方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。模版方法是通过把不变的行为搬移到父类,去除子类中重复的代码。模版方法模式是一个典型的代码复用的例子。应用场景:当在一些子类中会出现一些相同的代码,或者一些相同的功能不同的细节时,可以把相同的代码定义到父类中,而把相同的原创 2015-05-11 21:15:17 · 581 阅读 · 0 评论 -
设计模式C++实现八:外观模式
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,时刻这一子系统更加容易使用。使用场景:首先,在设计初期阶段,应该要有意识的将不同的两个层分离。比如经典的三层结构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观的Facade。其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小原创 2015-05-11 21:50:24 · 587 阅读 · 0 评论 -
设计模式C++实现六: 原型模式
原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另一个可定制的对象,而且不需知道创建的具体细节。#ifndef PROTOTYPE_H#define PROTOTYPE_H#include#includeusing namespace std;class Resume{ string nam原创 2015-05-11 19:26:53 · 614 阅读 · 0 评论 -
设计模式C++实现十:观察者模式
观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时会通知所有观察者对象,使他们能够自动更新自己。将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性,我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展、重用都带来不便。所以,当一个对象的改变同时需要改变其他对象而且不知道要原创 2015-05-12 10:05:29 · 877 阅读 · 0 评论 -
设计模式C++实现九:建造者模式
建造者模式(Builder):主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。其好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时使用的模式。#ifndef BUI原创 2015-05-12 08:21:36 · 769 阅读 · 0 评论 -
设计模式C++实现二十:职责链模式
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接受之间的耦合关系。将这个对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。职责链模式处理中,当客户有一个请求时,请求沿着链传递直到有一个对象处理它,我们在设计的时候也必须保证每一个请求都能被处理。接受者和发送者都没有对方的明确信息,而且链中的每个对象自己也不知道自己原创 2015-05-18 11:24:36 · 820 阅读 · 0 评论