大话设计模式初学
文章平均质量分 82
大冰的小屋
这个作者很懒,什么都没留下…
展开
-
策略模式---商场促销(C++实现)
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它(策略模式)可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类的之间的耦合。 策略模式就是用来封装算法的,但在实践中,可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同的时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。原创 2014-01-11 15:36:06 · 4982 阅读 · 0 评论 -
享元模式
享元模式:运用共享技术有效的支持大量细粒度的对象。 享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本都是相同的,有时就能够大幅度地减少需要需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。#include #i原创 2014-02-27 14:18:54 · 698 阅读 · 0 评论 -
中介者模式(C++实现)
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使得对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了多对多交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。 优点:Mediator的出现减少了各个Colleague原创 2014-02-26 11:11:47 · 767 阅读 · 0 评论 -
单例模式(C++实现)
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 #include using namespace std;class Singleton{private: static Singleton* instance; Singleton() {}public: static Singleton* GetInstance() { if( i原创 2014-02-25 15:26:48 · 662 阅读 · 0 评论 -
职责链模式(C++实现)
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连接成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandle对象负责处理它。职责链可以简化对象之间的互相连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用。#include #原创 2014-02-25 11:18:44 · 761 阅读 · 0 评论 -
组合模式(C++实现)
组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单一对象和组合对象的使用具有一致性。 当发现需求中是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。#include #include #include using namespace std;原创 2014-02-23 17:18:35 · 886 阅读 · 0 评论 -
桥接模式(C++实现)
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来,让它们独立变化,减少它们之间的耦合。 #include using namespace std;class HandsetSoft{public: virtual void Run() = 0; virtual ~Ha原创 2014-02-24 13:27:42 · 732 阅读 · 0 评论 -
状态模式(C++实现)
状态模式:当一个对象的内在状态改变是允许改变其行为,这个对象看起来像是改变了其类型。状态模式主要解决的是控制一个对象状态转换的条件表达式过于复杂时的情况。 把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简单化。 #include using namespace std;class Work;class State{public: v原创 2014-02-21 20:13:23 · 731 阅读 · 0 评论 -
抽象工厂模式(C++实现)
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 AbstractProductA和AbstractProductB是两个抽象产品,它们有两种或多种不同的实现,而ProductA1、ProductA2和ProductB1、ProductB2就是对这两抽象产品的具体分类的实现。 在运行时刻再创建一个ConcreteFactory原创 2014-02-21 15:25:20 · 963 阅读 · 0 评论 -
外观模式
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 何时使用外观模式:1、在设计初期阶段,应该有意识的将不同的两个层分离,层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。2、在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的原创 2014-01-15 16:40:39 · 1005 阅读 · 0 评论 -
工厂方法模式---重写计算器(C++)
简单工厂模式和工厂模式的区别: 简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关的类,对于客户端来说,除去了与具体产品的依赖。就像计算器,让客户端不用管该用哪个类的实例,只需把'+'给工厂,工厂自动就给出了相应的实例,客户端只要做运算就可以了。但是问题也在这里,如果要增加新的运算功能,就一定需要修改这个运算工厂类,违背了开放-封闭原则。原创 2014-01-13 20:39:44 · 1275 阅读 · 0 评论 -
代理模式----代理追求者
代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。可以应用的场合:1、远程代理;2、虚拟代理;3安全代理;4、智能指引。(都没用过,不做介绍了)。 以追求MM为例,小A喜欢MM小C,但是小C不认识小A,但是认识小A的好哥们小B,于是小A就买了礼物让小B代理他送给小C,并转达他的爱意。此时小A原创 2014-01-13 13:02:22 · 879 阅读 · 0 评论 -
装饰模式---衣服穿着设计(C++实现)
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。结构图: 以给一个人的穿着打扮为例。一个人可以穿休闲装:运动鞋,体恤,马裤;也可以穿正装:皮鞋,西服,领带;也可以穿其他的各种非主流装、超人装。将所有的装饰都写在一个类中难于维护,因此可将不同的装饰封装到不同的类中,有一个抽象类Finery类来指明要穿着的对象。这里没有用到C原创 2014-01-12 19:22:20 · 1702 阅读 · 0 评论 -
简单工厂模式----控制台计算器的设计(C++实现)
一个计算器的设计却也体现出了面向对象设计的封装、继承与多态三大特性。 让计算数据和过程与显示结果分开体现了封装的特性;为了程序的可扩展性,比如以后要加入开根号的运算而不去重写整个类,可以将每个操作符单独作为一个类,他们都继承共同的父类------抽象类:Operation类,这里体现了继承和多态的特性。 如何让计算器知道该用哪个操作符的类呢,这里用到了“简单工厂模式原创 2014-01-10 21:08:16 · 2851 阅读 · 0 评论