![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
design patter
文章平均质量分 85
hustyangju
这个作者很懒,什么都没留下…
展开
-
为什么设计模式在C++社区没有Java社区流行?
我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢? (1)C++内存需要自己管理,所以有些模式在C++里使用不是那么方便,但是Java不用关心内存,所以在Java里的使用设计模式有天生的优势。随着shared_ptr, weak_ptr, unique_ptr等加入C++11,相信这方面会有所改进。 (2)在J原创 2015-07-14 16:36:06 · 1600 阅读 · 0 评论 -
[C++设计模式] proxy 代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问。Proxy:保存一个引用使得代理可以访问实体。若RealSubject和Subject的接口相同,Proxy会引用Subject,就相当于在代理类中保存一个Subject指针,该指针会指向RealSubject;提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体;控制对实体的存取,并可能负责创建和原创 2015-07-22 10:45:07 · 856 阅读 · 0 评论 -
[C++设计模式] state 状态模式
《head first 设计模式》中的例子很不错,想制造一个自动交易的糖果机,糖果机有四个状态:投入钱不足,投入钱足够,出售糖果,糖果售罄。糖果机的当前状态处于其中不同的状态时,它针对同一个操作的反映动作也不同。传统面向过程编程会套用if-else对不同的状态下分别处理,逻辑麻烦而且不具有可拓展性。状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式的重点原创 2015-07-21 16:41:04 · 785 阅读 · 0 评论 -
[C++设计模式] iterator 迭代器模式
迭代器模式定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象。迭代器分内部迭代器和外部迭代器,内部迭代器与对象耦合紧密,不推荐使用。外部迭代器与聚合容器的内部对象松耦合,推荐使用。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集 合内部的数据。而且,可以同时定义多个迭代器来遍历,互不冲突原创 2015-07-21 15:37:02 · 976 阅读 · 0 评论 -
[C++设计模式] adapter 适配器模式
STL中,stack对vector或者双端队列进行封装,提供stack操作的接口就是典型的适配器模式。将一个类的接口转换成客户希望的另外一个接口,就是适配器模式。使用适配器模式有以下优点:降低了去实现一个功能点的难度,可以对现有的类进行包装,就可以进行使用了;提高了项目质量,现有的类一般都是经过测试的,使用了适配器模式之后,不需要对旧的类进行全面的覆盖测试;总的来说,提原创 2015-07-20 11:00:28 · 1031 阅读 · 0 评论 -
[C++设计模式]template 模板方法模式
模板法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。按照《headfirst 设计模式》的例子,煮茶和煮咖啡的算法框架(流程)是一样的,只是有些算法的实现是不一样的,有些是一样的。我们可以将共同的算法框架封装为一个虚基类,将相同的算法声明为不可覆盖的(static),不同的算法声明为子类要实现的纯虚函数。可以使用hook()函数处理算法框架的细小差异。看到这里,或许会想原创 2015-07-21 10:29:14 · 959 阅读 · 0 评论 -
[C++设计模式] command 命令模式
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单原创 2015-07-20 10:35:58 · 1307 阅读 · 1 评论 -
[C++设计模式] singleton 单例模式
这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比如你的软件的全局配置信息,或者是一个Factory,或是一个主控类,等等。你希望这个类在整个系统中只能出现一个实例。调用pthread_once()实现了一个线程安全的版本: pthread_once()函数详解代码:template class Singleton{public:原创 2015-06-23 17:46:44 · 726 阅读 · 0 评论 -
[C++设计模式] strategy 策略模式
按照陈硕老师的观点,c++里有面向过程编程,面向对象编程和面向接口编程,三种思路都各有其适用场景。面向过程编程是沿袭C的结构化编程思路,OOP是C++的核心,也是现代高级编程语言的核心。c++的OO核心是继承和多态,在GUI编程,构建关键类等编程中很有用,但是泛用继承和多态,会增加复用和维护的难度,也会使软件臃肿复杂。面向接口编程,多采用组合,类之间松耦合,可以简化类别架构,方便复用和原创 2015-07-14 11:17:29 · 791 阅读 · 0 评论 -
[C++设计模式] factory 工厂模式
说的直接点,工厂模式就是接管对象的创建,在new()的同时既可以做额外的异常处理、初始化等操作,又可以降低模块间的耦合,方便维护和拓展。根据创建对象的复杂度,可以分为简单工厂模式、工厂法模式和抽象工厂模式。一、简单工厂模式ProductA、ProductB和ProductC继承自Product虚拟类,Show方法是不同产品的自描述;Factory依赖于ProductA、Prod原创 2015-07-15 17:27:06 · 825 阅读 · 0 评论 -
[C++设计模式]observer 观察者模式
有这么一种松耦合的需求:有一些类的对象对类A对象的状态变化很感兴趣,不会改变类A的对象,也不会被类A的对象改变,想以一种较小的代价观察对类A对象状态变化。下面的几种方式也能实现上述目的(1)通过类的继承来共同管理和维护一些感兴趣的数据或者状态,但是耦合度大,不易扩展和维护。(2)通过调用被观察者的getter方法获取数据,这个还是直接的对象调用。上述两种方法将使观察者和被观察对原创 2015-07-14 17:25:56 · 996 阅读 · 0 评论 -
[C++设计模式] decorator 装饰者模式
《head first》中 的例子:咖啡店有各种咖啡饮料,可以往咖啡里面加各种调料变成另一种饮料,如果使用继承的方式来为每一种饮料设计一个类,代码的复杂度很容易膨胀,而且会继承父类的所有特性,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;同时,又掉入了另一个陷阱,随着扩展功能的增多,子类也会增多,各种子类的组合,就会导致类的膨胀,最后,就会被淹没在类的海洋。这时大神们就发明了装饰者原创 2015-07-15 15:32:48 · 1240 阅读 · 0 评论 -
[C++设计模式] composite 组合模式
组合(Composite)模式的其它翻译名称也很多,比如合成模式、树模式等等。在《设计模式》一书中给出的定义是:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。从定义中可以得到使用组合模式的环境为:在设计中想表示对象的“部分-整体”层次结构;希望用户忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象。看下组合模式的组成。原创 2015-07-22 15:43:05 · 799 阅读 · 0 评论