设计模式
codinglf
专注于视频直播行业,在这个行业基类了丰富的经验,热爱开源项目。
我坚信业精于勤,只有偏执狂才能真正的成功。
喜爱的开源项目有:ffmpeg、opencv、crtmpserver、obs-studio、nginx、redis、skynet、kbengine、protobuf等等。。。
我的博客:http://blog.csdn.net/windows_nt
展开
-
设计模式学习-----简单工厂模式
简单工厂模式 主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。GOOD:适用于不同情况创建不同的类时BUG:客户端必须要知道基类和工厂类,耦合性差转载请注明,文章来自:http://blog.csdn.net/windows_nt 例:#include us原创 2012-12-03 17:28:23 · 900 阅读 · 0 评论 -
设计模式学习-----桥接模式
桥接模式 GOOD:将抽象部分与实现部分分离,使它们可以独立变化。 这里说的意思不是让抽象基类与具体类分离,而是现实系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让它们独立变化,减少它们之间的耦合性,即如果继承不能实现“开放-封闭原则”的话,就应该考虑用桥接模式。如下例:让“手机”既可以按品牌分类也可以#include #include #inc原创 2012-12-11 15:03:52 · 814 阅读 · 0 评论 -
设计模式学习-----状态模式
状态模式GOOD:当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,可考虑用到状态模式。#include using namespace std;class Work;class ForenoonState;class NoonState;class State{public: virtual void WriteProgram(Work*原创 2012-12-11 14:26:17 · 851 阅读 · 0 评论 -
设计模式学习-----命令模式
命令模式GOOD:一、建立命令队列;二、可以将命令记入日志;三、接收请求的一方可以拒绝;四、添加一个新命令类不影响其它类;命令模式把请求一个操作的对象与知道怎么操行一个操作的对象分开 #include #include #include using namespace std;//烤肉师傅class Barbucer{public: voi原创 2012-12-11 15:11:23 · 795 阅读 · 0 评论 -
设计模式学习-----中介者模式
中介者模式 GOOD:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。#include #include #include using namespace std;class Colleague;//中介者类class Mediator{public: virtual void Send(原创 2012-12-13 14:39:18 · 900 阅读 · 0 评论 -
设计模式学习-----享元模式
享元模式 GOOD:运用共享技术有效地支持大量细粒度的对象(对于C++来说就是共用一个内存块啦,对象指针指向同一个地方)。如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销就应该考虑使用。还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用较少的共享对象取代多组对象,此时可以考虑使用享元。#include #include #includ原创 2012-12-13 14:51:08 · 865 阅读 · 0 评论 -
设计模式学习-----解释器模式
解释器模式 GOOD:通常当一个语言需要解释执行,并且你可以将该语言中的句子表示成为一个抽象的语法树时,可以使用解释器模式。#include #include #include using namespace std;class Context;class AbstractExpression{public: virtual void Interpret(Cont原创 2012-12-13 15:00:44 · 719 阅读 · 0 评论 -
设计模式学习-----访问者模式
访问者模式 GOOD:适用于数据结构稳定的系统。它把数据结构和作用于数据结构上的操作分离开,使得操作集合 优点:新增加操作很容易,因为增加新操作就相当于增加一个访问者,访问者模式将有关的行为集中到一个访问者对象中。#include #include #include using namespace std;class Man;class Woman;//行原创 2012-12-13 15:03:36 · 921 阅读 · 0 评论 -
设计模式学习-----观察者模式
观察者模式GOOD:定义了一种一对多的关系,让多个观察对象(公司员工)同时监听一个主题对象(秘书),主题对象状态发生变化时,会通知所有的观察者,使它们能够更新自己。转载请注明,文章来自:http://blog.csdn.net/windows_nt示例:#include #include #include using namespace std;class Secre原创 2012-12-06 08:46:27 · 1412 阅读 · 2 评论 -
设计模式之精简实现
1、策略模式主体主要是添加一个算法的基类,这样就可以通过创建不同的派生类算法,来达到运行时动态改变行为。2、观察者模式观察者 关键是要继承统一的监听接口。通知者 主要是实现:观察者list、添加观察者、删除观察者、通知观察者等接口。可分为:推送观察者模式,拉取观察者模式。3、装饰模式主要是通过装饰品替换装饰者来改变装饰者的行为。因此,装饰品要与装饰者有相原创 2014-05-09 08:15:55 · 1383 阅读 · 0 评论 -
设计模式学习-----组合模式
组合模式 GOOD:整体和部分可以被一致对待(如WORD中复制一个文字、一段文字、一篇文章都是一样的操作)#include #include #include using namespace std;class Component{public: string m_strName; Component(string strName) { m_strName原创 2012-12-11 14:50:48 · 896 阅读 · 0 评论 -
设计模式学习-----备忘录模式
备忘录模式 GOOD:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以将以后的对象状态恢复到先前保存的状态。适用于功能比较复杂的,但需要记录或维护属性历史的类;或者需要保存的属性只是众多属性中的一小部分时Originator可以根据保存的Memo还原到前一状态。#include #include using namespace std;原创 2012-12-11 14:40:21 · 1483 阅读 · 0 评论 -
设计模式学习-----适配器模式
适配器模式 GOOD:双方都不适合修改的时候,可以考虑使用适配器模式。#include #include using namespace std;class Player{protected: string name;public: Player(string strName) { name = strName; } virtual void Attack()=原创 2012-12-11 14:35:31 · 837 阅读 · 0 评论 -
设计模式学习-----装饰模式
装饰模式 动态地给一个对象添加一些额外的职责(不重要的功能,只是偶然一次要执行),就增加功能来说,装饰模式比生成子类更为灵活。建造过程不稳定,按正确的顺序串联起来进行控制。 GOOD:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的复杂度。装饰模式就是把要添加原创 2012-12-03 19:59:36 · 695 阅读 · 0 评论 -
设计模式学习-----策略模式
策略模式定义算法家族,分别封装起来,让它们之间可以互相替换,让算法变化,不会影响到用户GOOD:适合类中的成员以方法为主,算法经常变动;简化了单元测试(因为每个算法都有自己的类,可以通过自己的接口单独测试。 策略模式和简单工厂基本相同,但简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。BUG:客户端要做出判断转载请注明,文章来自:http://blog原创 2012-12-03 18:07:17 · 894 阅读 · 0 评论 -
设计模式学习-----工厂方法模式
工厂方法模式 GOOD:修正了简单工厂模式中不遵守开放-封闭原则。 工厂方法模式把选择判断移到了客户端去实现,如果想添加新功能就不用修改原来的类,直接修改客户端即可。转载请注明,文章来自:http://blog.csdn.net/windows_nt例:#include #include using namespace std;//实例基类,相当于Prod原创 2012-12-04 15:43:44 · 678 阅读 · 0 评论 -
设计模式学习-----原型模式
原型模式 GOOD:从一个对象再创建另外一个可定制的对象,而无需知道任何创建的细节。并能提高创建的性能。 说白了就COPY技术,把一个对象完整的COPY出一份。转载请注明,文章来自:http://blog.csdn.net/windows_nt例:#include#include #include using namespace std;class Protot原创 2012-12-04 15:58:22 · 702 阅读 · 0 评论 -
设计模式学习-----代理模式
代理模式GOOD:远程代理,可以隐藏一个对象在不同地址空间的事实 虚拟代理:通过代理来存放需要很长时间实例化的对象 安全代理:用来控制真实对象的访问权限 智能引用:当调用真实对象时,代理处理另外一些事转载请注明,文章来自:http://blog.csdn.net/windows_nt例:#include #include using names原创 2012-12-04 15:33:59 · 693 阅读 · 0 评论 -
设计模式学习-----外观模式
外观模式GOOD:为子系统的一组接口提供一个一致的界面。使用户使用起来更加方便。转载请注明,文章来自:http://blog.csdn.net/windows_nt例:#include#include using namespace std;class SubSysOne{public: void MethodOne() { cout<<"方法一"<<end原创 2012-12-04 19:51:47 · 773 阅读 · 0 评论 -
设计模式学习-----模板方法模式
模板方法模式 GOOD:把不变的代码部分都转移到父类中,将可变的代码用virtual留到子类重写。迪米特法则 如果两个类不直接通信,那么这两个类就不应当发生直接的相互作用。如果一个类需要调用另一个类的某个方法的话,可以通过第三个类转发这个调用。 在类的结构设计上,每一个类都应该尽量降低成员的访问权限。原创 2012-12-04 16:21:39 · 634 阅读 · 0 评论 -
设计模式学习-----建造者模式(生成器模式)
建造者模式(生成器模式)GOOD:在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用。转载请注明,文章来自:http://blog.csdn.net/windows_nt示例1:#include #include #include using namespace std;//最终的产品类class Product {private: ve原创 2012-12-06 08:27:58 · 1179 阅读 · 0 评论 -
设计模式学习-----抽象工厂模式
抽象工厂模式GOOD:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类。用于交换产品系列,如ACCESS->SQLSERVER;产品的具体类名被具体工厂的实现分离#include #include #include using namespace std;//用户抽象接口class IUser{public : virtual void Get原创 2012-12-11 14:18:11 · 881 阅读 · 0 评论 -
面向对象设计七大原则
单一职责原则(Single Responsibility Principle)每一个类应该专注于做一件事情。里氏替换原则(Liskov Substitution Principle)超类存在的地方,子类是可以替换的。依赖倒置原则(Dependence Inversion Principle)实现尽量依赖抽象,不依赖具体实现。接口隔离原则(Interface Segregation Pri转载 2016-07-03 10:58:10 · 588 阅读 · 0 评论