
大话设计模式
slionls
这个作者很懒,什么都没留下…
展开
-
《大话设计模式》--1.策略模式
策略模式定义:它定义了算法家族,分别封装起来,让他们之间可以相互替换,则模式让算法的变化,不会影响到使用算法的客户Strategy类,定义所有支持的算法的公共接口 //抽象算法类class Strategy{public: //算法方法 virtual void AlgorithmInterface() = 0;}; ConcreteStrategy,原创 2014-01-10 23:29:21 · 580 阅读 · 0 评论 -
《大话设计模式》 -- 14.抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类优点:1.易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,他只需要改变具体工厂即可使用不同的产品配置2.它让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出原创 2014-01-14 22:42:31 · 556 阅读 · 0 评论 -
《大话设计模式》 -- 13.观察者模式
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。//Subject类class Subject{private: vector observers; public: //增加观察者 virtual void A原创 2014-01-13 22:39:31 · 621 阅读 · 0 评论 -
《大话设计模式》 -- 12.建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。用户只需要指定需要构建的类型就可以得到他们,而具体的建造过程和细节就不需要知道了。//Product类--产品类,由多个部件组成class Product{private: vector parts; public: //添加产品部件 vo原创 2014-01-12 14:21:13 · 643 阅读 · 0 评论 -
《大话设计模式》-- 11.外观模式
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。四个子系统类 class SubSystemOne{public: void MethodOne() { cout <<"SystemOne" << endl; }};class SubSystemTwo{public:原创 2014-01-10 23:55:38 · 570 阅读 · 0 评论 -
《大话设计模式》-- 9.模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤AbstractClass 是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法。这个模板方法一般是以具体方法,他给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法 class Ab原创 2014-01-10 23:52:26 · 614 阅读 · 0 评论 -
《大话设计模式》-- 10.迪米特法则
迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用1.迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。2.类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修原创 2014-01-10 23:53:43 · 574 阅读 · 0 评论 -
《大话设计模式》-- 8.原型模式
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节Prototype,原型类 class Prototype{private: string id;public: Prototype (string id) { this-原创 2014-01-10 23:50:58 · 493 阅读 · 0 评论 -
《大话设计模式》-- 7.工厂方法模式
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。1.工厂方法实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行,你想要加功能,本来是改工厂类,而现在是修改客户端原创 2014-01-10 23:48:50 · 563 阅读 · 0 评论 -
《大话设计模式》-- 6.代理模式
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy class Subject{public: virtual void Request() = 0;}; RealSubject类,定义Proxy所代表的真实实体原创 2014-01-10 23:47:22 · 688 阅读 · 0 评论 -
《大话设计模式》-- 5.装饰模式
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道De原创 2014-01-10 23:45:02 · 604 阅读 · 0 评论 -
《大话设计模式》-- 4.依赖倒转原则
一、依赖倒转原则 1.高层模块不应该依赖底层模块。两个都应该依赖抽象。 2.抽象不应该依赖细节。细节应该依赖抽象。二、里氏代换原则 1.子类型必须能够替换掉他们的父类型 2.一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且他察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。原创 2014-01-10 23:41:12 · 620 阅读 · 0 评论 -
《大话设计模式》-- 3.开放-封闭原则
开放-封闭原则 1.软件实体(类、模块、函数等等)应该可以扩展,但是不可修改 2.对于扩展时开放的,对于更改时封闭的。 3.设计的时候,时刻要考虑,尽量让这个类足够好,写好了就不要去修改,如果新的需求来,我们增加一些类就完事了,原来的代码能不动则不动。但是,绝对的对修改关闭关闭是不可能的,无论模块式多么的‘封闭’,都会存在一些无法对之封闭的变化。既然不可能原创 2014-01-10 23:38:49 · 633 阅读 · 0 评论 -
《大话设计模式》-- 2.单一职责原则
一、单一职责原则 1.就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,在变化发生时,设计会遭受到意想不到的破坏。 3.软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。其实要去判断是否应该分离出类来,也不难,那就是如果你原创 2014-01-10 23:35:51 · 573 阅读 · 0 评论 -
《大话设计模式》 -- 15.状态模式
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类1.状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。2.状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。3.将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于原创 2014-01-15 22:33:59 · 566 阅读 · 0 评论