![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
c++ 设计模式分享
cachefish
这个作者很懒,什么都没留下…
展开
-
设计模式总结---完结散花
一个核心目标:管理变化,提高复用两个手段分解和抽象八大原则依赖倒置原则开放封闭原则单一职责原则Liskov替换模式接口隔离原则对象组合优于类继承封装变化点面向接口编程重构技法静态->动态早绑定->晚绑定继承->组合编译时依赖->运行时依赖紧耦合->松耦合从封装变化角度对模式分类组件协作:Template MethodStrategyObserver/Event单一职责:DecoratorBridge对象创建:Factory原创 2020-08-21 14:41:05 · 109 阅读 · 0 评论 -
设计模式之解析器模式(Interpreter)
“领域规则模式”在特定地领域中,某些变化虽然频繁,但可以抽象为某种规则,这时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域下地一般性解决方案。 解析器模式就是这种模式Context解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。AbstractExpression解释器抽象类。ConcreteExpression解释器具体实现类。#include <iostream>#include <map>#include <sta原创 2020-08-21 14:09:37 · 151 阅读 · 0 评论 -
设计模式之访问器模式(visitor)
概念表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类 的前提下定义作用于这些元素的新操作.动机在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题?抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。具体访问者原创 2020-08-21 13:35:59 · 213 阅读 · 0 评论 -
设计模式之命令模式(Command)
概念将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command原创 2020-08-21 11:33:40 · 203 阅读 · 0 评论 -
设计模式之职责链模式(COR)
概念Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这些对象连成一条链(形成一个链表,按链的顺序执行),并沿着这条链传递该请求,直到有一个对象处理它为止.例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。 首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,…,直到D完成d部分。例2:比如政府部分的某项工作,县政原创 2020-08-21 10:43:33 · 344 阅读 · 0 评论 -
设计模式之迭代器模式(Iterator)
概念Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。(stl中的迭代器)提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题。或者说,如果不使用Iterator模式,会存在什么问题。1.由容器自己实现顺序遍历。直接在容器类里直接添加顺序遍历方法2.让调用者自己实现遍历。直接暴露数据细节给外部。以原创 2020-08-20 17:08:44 · 134 阅读 · 0 评论 -
设计模式之组合模式( Composite)
概念Composite模式也叫组合模式,是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。动机在软件在某些情况下,客户代码过多的依赖于对象容器复杂的内部实现结构,对象容器内部实现结构的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性等弊端如何将“客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?Component (树形结构的节点抽象)为所有的对象定义统一的接原创 2020-08-20 16:41:18 · 347 阅读 · 0 评论 -
设计模式之备忘录模式(mememto)
概念Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这一状态,这样以后就可以将该对象恢复到原先保存的状态设计要点Memento 模式中封装的是需要保存的状态,当需要恢复的时候才取出来进行恢 复.原理很简单,实现的时候需要注意一个地方:窄接口和宽接口.所谓的宽接口就 是一般意义上的接口,把对外的接口作为 public 成员;而窄接口反之,把接原创 2020-08-20 15:45:02 · 307 阅读 · 0 评论 -
设计模式之状态模式(State)
概念State模式也叫状态模式,是行为设计模式的一种。State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化设计要点State 模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的 处理操作的问题,而这样的问题,大部分人是采用 switch-case 语句进行处理的, 这样会造成一个问题:分支过多,而且如原创 2020-08-20 14:05:17 · 499 阅读 · 0 评论 -
设计模式之中介者模式(Mediator)
概念Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。动机在软件架构过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可以使用一个中介对象管理对象间的关联关系,避免互相原创 2020-08-20 12:37:49 · 153 阅读 · 0 评论 -
设计模式之适配器模式(Adapter)
概念Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。适用于:是将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。#include <iostream>using namespace std;class Current18v{public: void use18vCurrent() { cout原创 2020-08-19 16:00:47 · 146 阅读 · 0 评论 -
设计模式之代理模式(Proxy)
概念Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。为其他对象那个提供一种代理以控制(隔离、使用接口)对这个对象的访问。动机在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某种操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者或者系统结构带原创 2020-08-19 15:14:38 · 134 阅读 · 0 评论 -
设计模式之外观模式(facade)
概念Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。为子系统中的一组接口提供一个一致稳定的界面,该模式需要定义一个高层接口,这个接口使得这一子系统更加容易使用动机组件的客户和组件中各种复杂的子系统有过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合会面临很多变化的挑战,如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系原创 2020-08-19 14:20:35 · 353 阅读 · 0 评论 -
设计模式之享元模式(Flyweight)
概念Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。运用共享技术有效地支持大量细粒度的对象抽象享元角色:所有具体享元类的父类,规定一些需要实现的公共接口。具体享元角色:抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。享元工厂角色:负责创建和管理享元角色。使用场景:是以共享的方式,高效的支持大量的细粒度的对象class Font {private: //unique object key string key;原创 2020-08-19 13:54:48 · 137 阅读 · 0 评论 -
设计模式之单例模式(Singleton)
概念单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。动机在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来确保一个类只有一个实例?保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。为什么使用单例模式在应用系统开发中,我们常常有以下需求:在多个线程之间,比如初始化一次socket资源原创 2020-08-18 17:33:17 · 95 阅读 · 0 评论 -
设计模式之构造器模式(Builder)
概念Builder模式也叫建造者模式或者生成器模式。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。将一个复杂对象的构建与其表示相分离,使得同样的构建过 程(稳定)可以创建不同的表示(变化)对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属原创 2020-08-18 16:22:58 · 388 阅读 · 0 评论 -
设计模式之原型模式(Prototype)
概念Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。1)由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。2)目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。3)根据对象克隆深度层次的不同,有浅度克隆与深度克隆。动机原型模式主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,原创 2020-08-18 15:49:02 · 104 阅读 · 0 评论 -
设计模式之工厂模式(Abstract Factory 抽象工厂 )
“对象创建”模式通过“对象创建” 模式绕开new,来避免对象创建(new)过程 中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它 是接口抽象之后的第一步工作。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。动机(Motivation)在软件系统中,经常面临着“一系列相原创 2020-08-17 17:46:33 · 104 阅读 · 0 评论 -
设计模式之桥接模式(bridge模式)
概念Bridge 模式又叫做桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。“单一职责”模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的 结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码, 这时候的关键是划清责任。动机(Motivation)由原创 2020-08-17 16:31:23 · 657 阅读 · 0 评论 -
设计模式之装饰模式(Decorator模式)
概念装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。动态(组合)地给一个对象增加一些额外的职责。就增加功 能而言,Decorator模式比生成子类(继承)更为灵活(消 除重复代码 & 减少子类个数)。动机(Motivation)在某些情况下我们可能会“过度地使用继承来扩展对原创 2020-08-17 15:45:35 · 198 阅读 · 0 评论 -
设计模式之观察者模式
概念Observer模式是行为模式之一,它的作用是定义对象间的一种一对多(变化)的依赖关系,以便当一个 对象(Subject)的状态发生改变时,所有依赖于它的对象都 得到通知并自动更新。Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。Subject(被观察者)被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。ConcreteSubject观察者的具体原创 2020-08-16 17:01:17 · 67 阅读 · 0 评论 -
设计模式之策略模式(Strategy模式)
概念Strategy模式也叫策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法的切换 。Strategy:策略(算法)抽象。ConcreteStrategy各种策略(算法)的具体实现。Context策略的外部封装类,或者说策略的容器类。根据不同策略执行不同的行为。策略由外部环境决定。总结Strategy及其子类为组件提供了原创 2020-08-16 16:27:27 · 146 阅读 · 0 评论 -
设计模式之 模板模式(Template Method)
概念Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。为什么产生这一模式?平时在写代码时,当对于某一个任务,他本身有自己稳定的整体操作结构,但各个子步骤会有很多改变的需求,所以需要通过在子类中对一个方法的重写从而实现该算法的特定步骤,达到不改变原有结构便可实现的目的应用场景Template Method模式一般应用在具有以下条件的应用中:具有统一的操作步骤或操作过程具有原创 2020-08-16 15:36:10 · 77 阅读 · 0 评论 -
设计模式总述
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化。通过了解设计模式,可以让我们对一个架构的底层产生了解,了解这个设计模式所产生的原因,以及用这种设计模式后所产生的好处。通过利用合理的设计模式和自己对类与类之间的关系,以及类内的属性与方法的设计,形成高效的设计模式。设计模式的分类Gang of Fo原创 2020-08-16 15:06:15 · 74 阅读 · 0 评论