![](https://img-blog.csdnimg.cn/20190718172559501.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++ 设计模式
文章平均质量分 85
参考”大话设计模式“与”菜鸟教程“
土拨鼠不是老鼠
这个作者很懒,什么都没留下…
展开
-
设计模式整理(人人都懂设计模式)
1.监听模式设计要点:(1) 要明确谁是观察者谁是被观察者。一般观察者与被观察者之间是多对一的关系,一个被被观察者对象可以有多个监听对象。如一个编辑框,有鼠标点击的监听者,也有键盘的监听者,还有内容改变的监听者。(2)Observable 在发送广播的通知的时候,无需制定具体的Observer,Observer可以自己决定是否订阅Subject的通知。(3)被观察者至少需要三个方法:添加监听者、移除监听者、通知Observer方法。观察者至少需要有一个方法:更新方法、即更新当前的内容,做出相原创 2021-12-06 00:10:28 · 388 阅读 · 0 评论 -
C++ 设计模式
原创 2019-05-14 17:24:54 · 189 阅读 · 0 评论 -
访问者模式
一,简介访问者模式(visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。二,角色visitor(访问者)为对象结构中每一个ConcreteElement声明一个visit操作ConcreteVisitor(具体访问者)实现每个由visitor声明的操作Element(元素)定义一个ac...原创 2019-07-23 16:20:30 · 158 阅读 · 0 评论 -
状态模式
一,简介在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。二,角色Context维护一个ConcreteState子类的实例,这个实例定义当前的状态State抽象状态类,定义一个接口以封装与Context的一个...原创 2019-07-23 14:56:14 · 98 阅读 · 0 评论 -
命令模式
一,简介命令模式(command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单个请求封装成对象以后,我们就可以对这个请求存储更多的信息,使请求拥有更多的能力;命令模式同样能够把请求发送者和接收者解耦,使得命令发送者不用去关心请求将以何种方式被处理...原创 2019-07-23 14:11:10 · 111 阅读 · 0 评论 -
解释器模式
一,简介解释器模式(interpreter pattern)提供了评估语言的语法或表达式的方式,它属于行为模式。这种模式实现了一个表达式接口,该接口解释了一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等场合。二,角色AbstractExpression抽象表达式,声明一个抽象的解释操作,这个接口为抽象语法树中所有节点共享TerminalExpression终...原创 2019-07-22 15:29:07 · 112 阅读 · 0 评论 -
享元模式
一,简介享元模式(Flywight Pattern)主要用于减少对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。二,角色FlyweightFactory一个享元工厂,用来创建并管理Flyweight对象。它主要用来确保合理地共享Flyweight,当用户请求一个Flyweight时,FlyweightF...原创 2019-07-20 14:36:18 · 143 阅读 · 0 评论 -
中介者模式
一,简介中介者模式(Mediator Pattern):是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为模式。二,角色Mediator抽象中介者,定义了同事对象到中介者对象的接口ConcreteMediator具体中介者对象,实现抽象类方法,它需要知道所有具体同事类,并从具...原创 2019-07-20 13:37:43 · 111 阅读 · 0 评论 -
职责链模式
一,简介职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关心。将这个对象连城一条链,并沿着这条链传递请求,直到有一个对象处理它为止。二,角色Handler定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色通常由一个抽象类或接口实现。ConcreteHa...原创 2019-07-18 16:50:54 · 116 阅读 · 0 评论 -
桥接模式
一,简介将抽象部分与它的实现部分分离,使它们都可以独立地变化。翻译成人话:实现系统有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合二,角色Abstraction抽象RefinedAbstraction被提炼的抽象Implementor实现ConcreteImplementorA具体实现...原创 2019-07-16 15:51:05 · 138 阅读 · 0 评论 -
单例模式
一,简介单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。二,角色Singleton定义一个GetInstance操作,允许客户访问它的唯一实例。此方法为一个静态方法。主要负责创建自己的唯一实例三,举例实现方式为饿汉模式和懒汉模式。懒汉模式为第一次使用时才创建一个唯一的实例对象,饿汉模式为程序启动就创建一个唯一的实例对象。参考:h...原创 2019-07-16 11:25:50 · 124 阅读 · 0 评论 -
迭代器模式
一,简介迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。二,角色Aggregate聚集抽象类ConcreteAggregate具体聚集类Iterator迭代抽象类,用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口ConcreteIterator具体迭代器...原创 2019-07-16 10:26:43 · 112 阅读 · 0 评论 -
组合模式
一,简介组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构模式,它创建了对象组的树形结构。二,角色Component组合中的对象接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理ComponentLeaf...原创 2019-07-13 15:09:44 · 102 阅读 · 0 评论 -
备忘录模式
一,简介备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式输入行为模式。二,角色Originator负责创建一个备忘录 Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态Memento负责存储Originator对象的内部状态,并可防止Originator以外的其它对象访问备忘录Care...原创 2019-07-13 14:10:29 · 126 阅读 · 0 评论 -
适配器模式
一,简介适配器模式(adapter),将一个类的接口转成客户希望的另一个接口。adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。二,角色Target客户所期待的接口,目标可以使具体的或抽象的类,也可以是接口。Adapter通过在内部包装一个Adaptee对象,把源接口转成目标接口Adaptee需要适配的类三,举例适...原创 2019-07-12 17:12:05 · 102 阅读 · 0 评论 -
抽象工厂模式
一,简介抽象工厂模式(Abstract Factory),提供一系列相关或相互依赖对象的接口,而无需指定他们具体的类。二,角色AbstractFactory抽象工厂接口,它里面应该包含所有的产品创建的抽象方法ConcreteFactory 1具体的工厂,创建具有特定实现的产品对象AbstractProductA抽象产品,他们都有可能有两种不同的实现...原创 2019-07-12 12:54:18 · 197 阅读 · 0 评论 -
观察者模式
一,简介观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。二,角色Observer抽象观察者,为所有的具体观察者定义一个借口,在得到主题的通知时更新自己ConcreteObserver具体观察者,实现抽象观察者所要求的更新接口,以便使本身的状态与主题的状态相协调...原创 2019-07-10 17:40:52 · 210 阅读 · 0 评论 -
建造者模式
一,简介建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。二,角色builder为创建一个Product对象的各个部件指定的抽象接口ConcreteBuilder具体建造者,实现builder接口,构造和装配各个部件Director指挥者,是构建一个使用builder接口的对象三,举例...原创 2019-07-10 16:00:23 · 116 阅读 · 0 评论 -
外观模式
一,简介外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。二,角色Facade外观类,知道哪些子系统负责处理请求,将客户的请求代理给适当的子系统SubSystemOne子系统类集合,实现子系统功能,处理Facade对象指派的任务三,举例一个任务的完成,需要多个子系统共同参与...原创 2019-07-10 14:20:21 · 111 阅读 · 0 评论 -
模板模式
一,简介模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法得结构即可重定义该算法得某些特定步骤。二,角色AbstractClass实现了一个模板方法,定义了算法的骨架。并定义个Operation步骤ConcreteClass实现Operation以完成算法中与特定子类相关的步骤三,举例以玩游戏为例...原创 2019-07-09 16:44:21 · 123 阅读 · 0 评论 -
原型模式
一,简介原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,...原创 2019-07-09 15:46:47 · 95 阅读 · 0 评论 -
工厂方法模式
一,简介工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。核心思想:将工厂抽象出来,将产品抽象出来,子工厂负责new 子产品指针,返回抽象产品类指针,外面调用时只需要生成基类工厂指针,调用创建产品函数,就可以对该产品进行具体的操作,优点是能够将添加产品完全独立出来不再修改内部代码。与简单工厂比较:修...原创 2019-07-09 13:57:38 · 132 阅读 · 0 评论 -
代理模式
一,简介代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。与装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制二,角色Subject定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用ProxyRealSubject定义Proxy所代表的的真实实体Proxy保存...原创 2019-07-09 11:01:49 · 159 阅读 · 0 评论 -
装饰模式
一,简介装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。二,角色Component定义一个对象接口,可以给这些对象动态的添加职责ConcreteComponent定义一个对象,可以给这个对象添加一些职责Decorator维持一个指向Component对象的指针,并定义一个与Compone...原创 2019-07-08 17:26:54 · 97 阅读 · 0 评论 -
策略模式
一,简介它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法得客户。二,角色策略类(Strategy)定义了所有支持的算法得公共接口具体策略类(ConcreteStrategy)封装了具体的算法或行为,继续于Strategy使用了某种策略的类(Context)用一个ConcreteStrategy 类配置、维护一个...原创 2019-07-08 15:43:24 · 125 阅读 · 0 评论 -
简单工厂模式
一,简介简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于创建型模式。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承或实现一个父类或接口)的实例。二,角色工厂类(Creator)角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂...原创 2019-07-08 14:19:57 · 160 阅读 · 0 评论 -
C++ 单例模式的几种实现
懒汉模式是在第一次使用单例对象时才完成初始化工作。因为此时可能存在多线程竞态环境,如不加锁限制会导致重复构造或构造不完全问题。饿汉模式则是利用外部变量,在进入程序入口函数之前就完成单例对象的初始化工作,此时是单线程所以不会存在多线程的竞态环境,故而无需加锁。一、 懒汉模式,标准的 ”双检锁“ + ”自动回收“ 实现class Singleton{publ...原创 2019-05-22 14:55:52 · 466 阅读 · 0 评论