设计模式
文章平均质量分 71
rukawashan
这个作者很懒,什么都没留下…
展开
-
行为型模式 - 策略模式(STRATEGY)
1. 意图定义一些列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。2. 别名政策(Policy)3. 结构4. 例子//策略基类class Strategy{public: Strategy(){}; ~Strategy(){}; virtual void tax(int a,int b)=0;};//策略子类,不同的方法实现class CN_Tax : public Strat...原创 2022-05-04 18:26:05 · 115 阅读 · 0 评论 -
行为型模式 - 模板方法模式(TEMPLATE METHOD)
1. 意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2. 结构3. 模板模式和策略模式区别策略模式:定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。关键点在于每个算法都是过程完整且独立的。模板方法模式:模板则是将骨架定义好,例如执行的步骤或先后顺序。骨架中的部分在父类中进行实现,而子类的个性化行为则由子类继承再加以实现。区别的本质就是策略模式是替换了整个流程。而模板原创 2022-05-04 17:49:00 · 109 阅读 · 0 评论 -
行为型模式 - 状态机模式(STATE)
1. 意图状态模式是一种对象行为模式。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态机又叫有限状态机,它有 3 个部分组成:状态、事件、动作。其中,事件也称为转移条件。事件触发状态的转移及动作的执行。不过,动作不是必须的,也可能只转移状态,不执行任何动作。针对状态机,有三种实现方式。第一种实现方式叫分支逻辑法。利用 if-else 或者 switch-cas原创 2022-05-04 17:30:58 · 882 阅读 · 0 评论 -
行为型模式 - 观察者模式(OBSERVER)
1. 意图观察者模式是一种对象行为模式。它定义对象间的一种一对多的的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。2. 别名依赖(Dependents)、发布-订阅(Publish-Subscribe)3. 使用场景1、当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。2、当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象需要被改变。3、当一个对象必须通知其他对象,而它又不原创 2022-05-04 15:29:12 · 137 阅读 · 0 评论 -
结构型模式 - 代理模式(PROXY)
1. 意图为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。2. 别名Surroagate3. 组成抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。4. 优点(1).职责清晰真实的角色原创 2022-05-04 13:29:47 · 90 阅读 · 0 评论 -
结构型模式 - 其它模式
1. 桥接模式(BRIDGE)2. 组成模式(COMPOSITE)3. 装饰模式(DECORATOR)4. 外观模式(FACADE)5. 享元模式(FLYWEIGHT)原创 2022-05-03 01:28:32 · 143 阅读 · 0 评论 -
结构型模式 - 适配器模式(ADAPTER)
1. 意图将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。2. 别名包装器Wrapper3. 动机有时,为复用而设计的工具箱类不能够被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配。...原创 2022-05-03 01:08:15 · 171 阅读 · 0 评论 -
创建型模式 - 其他模式
1. BUILDER(生成器)模式2. PROTOTYPE(原型)模式原创 2022-05-03 01:00:58 · 102 阅读 · 0 评论 -
创建型模式 - 单件模式(Singleton)
保证一个类仅有一个实例,并提供一个访问它的全局访问点。应用场景:当一个类只有一个实例,而且客户端可以从一个众所周知的访问点访问它时; 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无须更改代码就能使用一个扩展的实例时;例子:1. 常用单例class Singleton{public: static Singleton* getSingleton() { if(singleton == nullptr) { ...原创 2022-04-28 23:49:18 · 150 阅读 · 0 评论 -
创建型模式 - 工厂方法模式与抽象工厂模式之间的区别
工厂方法模式属于对象创建型模式,它定义一个用户创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。具体来说,就是一个一个抽象产品类,派生出多个具体产品类;同时,一个抽象工厂类,派生出多个具体工厂类。而每个具体工厂类只能创建一个具体产品类的实例。抽象工厂模式也属于对象创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无须制定它们具体的类。具体来说就是在多个抽象产品类中,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个原创 2022-04-28 23:11:55 · 2302 阅读 · 0 评论 -
创建型模式 - 工厂方法模式(FACTORY METHOD)
定义一个用户创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。工厂方法经常用在以下两种情况中:第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是原创 2022-04-28 22:58:46 · 115 阅读 · 0 评论 -
创建型模式 - 抽象工厂模式(ABSTRACT FACTORY)
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。具体来说就是在多个抽象产品类中,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。例子:假设我们有两种产品接口 Button 和 Border ,每一种产品都支持多种系列,比如 Mac 系列和 Windows 系列。这样每个系列的产品分别是 MacButton, WinButton, MacBorder, WinBorder 。为了可以在运行时刻原创 2022-04-28 01:06:30 · 114 阅读 · 0 评论