设计模式
sampson MrLiang
笨点不要紧,坚持最重要!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式《二十三》——迭代器模式
简介 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。可以使用不同的方式来遍历整个整合对象。 角色与职责 Iterator:抽象迭代,定义访问和遍历元素的接口,一般都是固定接口:first,next,IsDone/last ConcreteIterator:具体迭代器,实现迭代器接口,完成容器元素的遍历 Container:抽象容器,负责提供具体迭代器角色的接口,必然提供一个CreateIterator的方法。 ConcreteContainer...原创 2020-07-10 21:33:11 · 387 阅读 · 0 评论 -
设计模式《二十二》——解析器模式
简介 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。即提供了评估语言的语法或表达式的方式 角色与职责 (1)Expression(抽象表达式):声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。 (2)TerminalExpression(终结符表达式):实现与文法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口,主要是一个interpreter()方法。文法中每一个终结符都有一个具体终结表达式与之相对应。 ...原创 2020-06-28 22:11:49 · 265 阅读 · 0 评论 -
设计模式《二十一》——状态模式
简介 当对象的内部状态改变时,同时改变其行为,对象看起来好像修改了它的类。其好处是可以通过改变状态来获得不同的行为。实现时需要将各种具体的状态类抽象出来。 角色与职责 State:实现类接口 ConcreteState:具体实现类 Context:实现切换。 实现 #include <iostream> using namespace std; class Worker; class State { public: virtual void doSomeT...原创 2020-06-26 09:09:09 · 237 阅读 · 0 评论 -
设计模式《二十》——访问者模式
简介 访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。例如,使用访问者类改变元素的执行算法,通过这种方式,元素的执行算法可以随着访问者改变而改变。 角色与职责 抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。 具体访问者(ConcreteVisitor)角色:实现抽象访问者角色所声明的接口,也就是抽象访问者所声明的各个访问操作。 抽象节点(Element...原创 2020-06-14 09:07:26 · 220 阅读 · 0 评论 -
设计模式《十九》——备忘录模式
简介 在不破坏封装的前提下,捕获对象的内部状态,并在对象之外保存这个状态,以便在适当的时候恢复对象。 角色与职责 Originator:原始类,里面有需要保存的属性value及创建一个备忘录类,用来保存value值; Memento:备忘录类; CareTaker:存储备忘录的类,持有Memento类的实例。 实现 #include <iostream> #include <vector> using namespace std; //需保存的信息 c..原创 2020-06-13 21:08:04 · 250 阅读 · 0 评论 -
设计模式《十八》——观察者模式
简介 观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在主题对象的状态发生变化时,所有依赖于它的对象都得到主题对象的通知并被自动更新。 角色与职责 Subject(目标) 目标知道它的观察者。可以有任意多个观察者观察同一个目标; 提供注册和删除观察者对象的接口。 Observer(观察者) 为那些在目标发生改变时需获得通知的对象定义一个更新接口。 ConcreteSubject(具体目标) 将有关状态存入各ConcreteObserver对...原创 2020-06-09 21:55:07 · 254 阅读 · 0 评论 -
设计模式《十七》——中介者模式
简介 中介者模式类似现实生活中的房产中介,买房者通过中介与卖房者进行交流。其用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 角色与职责 mediator:中介者抽象对象; ConcreteMediator:中介者具体实现; Colleague:同事类,同事类知道他的中介者(即持有中介者引用),同事类之间需要通信时,需要与它的中介者通信。 实现 #include <iostream> ...原创 2020-05-28 20:40:28 · 271 阅读 · 1 评论 -
设计模式《十六》——策略模式
简介 策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。其定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。 角色与职责 Strategy:算法抽象类 OperatorAdd:具体算法实现类 实现 #include <iostream> using std::cout; using std::endl; class Strategy { public: virtual void Cryp...原创 2020-05-26 20:51:56 · 182 阅读 · 0 评论 -
设计模式《十五》——责任链模式
简介 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。 角色与职责 Handler:处理请求的接口,接口中定义一个方法,以设定和返回对下一家的引用。 ConcreteHandler:具体处理者接到请求后,可以选择将请求处理掉,也可以将请求传给下家。 实现 #inc...原创 2020-05-22 20:48:47 · 177 阅读 · 0 评论 -
设计模式《十四》——命令模式
简介 命令模式(Command)是一种数据驱动的模式,Command的类封装了对目标对象的调用行为以及调用参数。其目的是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。 角色与职责 Invoker:调用者; Comma...原创 2020-05-20 21:37:16 · 183 阅读 · 0 评论 -
设计模式《十三》——模板模式
简介 一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现。其目的是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 角色与职责 AbstractClass:提供抽象的接口; ConcreteClass:实现类,继承自抽象类,实现抽象类的接口。 实现 #include <iostream> // 网购 class OnlineShopping { public: ...原创 2020-05-14 21:13:20 · 199 阅读 · 0 评论 -
设计模式《十二》——享元模式
简介 用于减少创建对象的数量,实现对象的共享,当对象多的时候可以减少内存占用和提高性能。 角色与职责 Flyweight:描述一个接口,通过这个接口flyweight可以接受并作用于外部状态; ConcreteFlyweight:实现Flyweight接口,并为定义了一些内部状态,ConcreteFlyweight对象必须是可共享的;同时,它所存储的状态必须是内部的;即,它必须独立于ConcreteFlyweight对象的场景; UnsharedConcreteFlyweight:并非所.原创 2020-05-09 22:12:41 · 293 阅读 · 0 评论 -
设计模式《十一》——外观模式
简介 观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度。 角色与职责 Facade:为方便调用,定义的统一包装接口 SubSyntem:功能提供者,指提供功能的类群。 使用场景 客户端与系统端解耦时,客户端不需要知道系统内部的复杂联...原创 2020-05-07 21:11:50 · 226 阅读 · 0 评论 -
设计模式《十》——组合模式
简介 组合模式又叫部分-整体模式,用于把一组相似的对象当作一个单一的对象,依据树状结构来组合对象。使得用户对单个对象和组合对象的使用具有一致性。例如,公司职员组织关系。 角色与职责 Component:组合类中的抽象接口,在适当的情况下,实现所有类共有接口的默认行为 Composite:有枝节点行为,用于存储子部件,在Component接口中实现与子部件有关的...原创 2020-05-01 22:35:00 · 255 阅读 · 0 评论 -
设计模式《九》——桥接模式
简介 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。 ...原创 2020-04-25 20:04:40 · 207 阅读 · 0 评论 -
设计模式《七》——装饰模式
简介 顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。 角色与职责 Component:抽象接口,可以给这些对象动态地增加职责。 ConcreteComponent:Component的具体对象,也可以对这个对象添加一下职责。 Decorator:装饰抽闲类,继承自Component,从Decora...原创 2020-04-19 11:59:40 · 229 阅读 · 0 评论 -
设计模式《六》——代理模式
简介: 其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。 角色与职责: Subj...原创 2020-04-15 21:45:43 · 212 阅读 · 0 评论 -
设计模式《五》——原型模式
简介 原型模式虽然是创建型的模式,但是与工厂模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。 角色与职责 Protoytpe:抽象接口 ConcretePrototype:具体实现类,注意针对指针时深拷贝和浅拷贝的问题。 使用范围 一个复杂对象,具有自我复制功能,统一一套接口。用原型实例指定创建...原创 2020-04-12 20:51:20 · 173 阅读 · 0 评论 -
设计模式《四》——建造者模式
简介 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象 角色与职责 Director:使用Builder接口的对象。 Builder:为创建产品的各个部分,统一抽象接口。 ConcreteBuiler:具体创建产品的各个部分,如A部分和B部分。定义了创建产品的过程和其他。 Product:表示被构造的复杂对象。 工程...原创 2020-04-09 20:02:33 · 163 阅读 · 0 评论 -
设计模式《三》——抽象工厂方法
1、简介 工厂方法的绝点是只能生成一类产品,不同生成不同类别的产品,而抽象工厂便可以解决此问题。 工厂方法模式和抽象工厂模式不好分清楚,他们的区别如下: 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一...原创 2020-04-08 10:05:46 · 277 阅读 · 0 评论 -
设计模式《二》——工厂方法
简介 简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。 角色与职责 实现 #include <iostream&...原创 2020-04-06 20:31:44 · 187 阅读 · 0 评论 -
设计模式《一》——单例模式
简介 单例对象(Singleton)是一种常用的设计模式。其保障一个类只有单个对象被创建,在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个...原创 2020-04-06 15:52:45 · 171 阅读 · 0 评论 -
设计模式——简单工厂模式
简介 简单工厂模式又叫做静态工厂方法(Static Factory Method)模式。该模式不属于23种GOF设计模式,但是可以被认为是一种特殊的工厂方法模式。 简单工厂模式最大的缺点是违背了“开闭原则”,当增加了新的产品时,需要去修改简单工厂类的结构。工厂方法模式主要是针对单一产品结构的情景,而抽象工厂模式是针对多级产品结构的场景。 角色与职责 实现 ...原创 2020-04-05 20:31:19 · 158 阅读 · 0 评论 -
设计模式总概述
前言 最近想写一个设计模式的专栏,在写具体设计模式前还是写写设计模式的总分类吧。 六大原则 开闭原则:对扩展开放,对修改关闭,多使用抽象类和接口。 里氏替换原则:基类可以被子类替换,使用抽象类继承,不使用具体类继承。 依赖倒转原则:要依赖于抽象,不要依赖于具体,针对接口编程,不针对实现编程。 接口隔离原则:使用多个隔离的接口,比使用单个接口好,建立最小的接口。 迪米特法则:一个软件实...原创 2020-04-05 16:10:10 · 150 阅读 · 0 评论
分享