![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式笔记
学习笔记
开始沸腾了
这个作者很懒,什么都没留下…
展开
-
设计模式-第二十五章-分类总结
一、创建型模式 单例模式(Singleton) 工厂方法(Factory Method) 抽象工厂(Abstract Factory) 建造者模式(Builder) 原型模式(Prototype)二、结构型模式 适配器模式(Adapter) 装饰模式(Decorator) 桥接模式(...原创 2022-02-14 22:26:06 · 84 阅读 · 0 评论 -
设计模式-23种-分类整理
目录设计模式的六大原则设计模式的三大类《深入设计模式》读后总结总原则——开闭原则(Open Closed Principle)在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等。不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件原创 2021-12-04 19:24:15 · 301 阅读 · 0 评论 -
设计模式-第一章-简单工厂模式
一、UML图c++版本简单工厂模式包含三个角色:(1)工厂类Factory:工厂类是用来制造产品的。因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类的函数(这里的CreateProduct)。这个函数能够根据“标识符”(这里的ProductType)的不同生成不同的ConcreteProduct,当然这些ConcreteProduct都是继承自AbstractProduct的。(2)抽象产品类AbstractProduct:抽象产品是从其他具体产品抽象出来的。抽象产品原创 2017-07-28 12:57:15 · 336 阅读 · 0 评论 -
设计模式-第二章-策略模式
策略模式包含三个角色:(1)策略类Strategy: 策略类定义所有支持的算法的公共接口(2)具体策略类ConcreteStrategy:具体策略类,封装了具体算法或行为,继承自Strategy。(3)上下文Context: 上下文类,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。(1)策略模式是一种定义一系列算法的方法,所有这些算法完成的都是相同的工作,只是实现不同。策略模式,可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。(2)策略模式的st原创 2017-07-29 10:39:16 · 397 阅读 · 0 评论 -
设计模式-第三章-装饰模式
(1)Component是一个对象接口,可以给对象动态的添加职责(2)ConcreteComponent 定义了一个具体的类,可以给这个类添加一些职责(3)Decorater 为装饰的抽象类,继承了Component,从外类来扩展Component的功能,但对于Component来说。是无需知道Decorater的存在的(4)ConcreteDecorater为装饰的具体类,起到给Component添加职责的功能。 定义:装饰模式(Decorater),动态的给一个对象添加一些额外的职责,就增加功能来说,原创 2017-07-29 15:41:45 · 264 阅读 · 0 评论 -
设计模式-第四章-代理模式
Suject类,定义了RealSubject和Proxy的共用接口RealSubject类,定义了Proxy所代理的真实实体Proxy类,代理类。定义:代理模式(Proxy)为其他对象提供一种代理,用来控制对这个对象的访问。应用场合:(1)远程代理,为一个对象在不同地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。(2)虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。(3)安全代理,用来控制真实对象访问时候的权限(4)智能指引,调用真实对象时候,代理处理另外原创 2017-08-09 15:10:12 · 250 阅读 · 0 评论 -
设计模式-第五章-工厂方法模式
IProduct类,定义工厂方法创建对象的接口ConreteProduct类,具体产品类,实现IProduct接口ICreator类,工厂方法类基类,声明了工厂方法,该方法返回一个IProduct类。ConcreteCreator类,重写工厂方法,返回ConcreteProduct实例。定义:工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。1.与简单工厂相比,制造产品的工厂类不只有一个,而是每种具体产品都对应一个生产它的原创 2017-08-25 20:22:14 · 331 阅读 · 0 评论 -
设计模式-第六章-原型模式
IProtoType类,定义一个克隆自身的接口Clone()ConcreteProtoType1、ConcreteProtoType2等等,实现一个克隆自身的Clone()操作Client类,调用方法,Operation,让一个原型克隆自身,创建一个新的对象定义:原型模式(ProtoType),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。1.原型模式实际上就是从一个对象再创建另外一个可定制的对象,而且不需要任何创建细节。2.一般在初始化的信息不发生变化的情况下,克隆是最好的办法,这基因长原创 2018-05-21 23:26:21 · 238 阅读 · 0 评论 -
设计模式-第七章-模板方法模式
AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级的逻辑骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类中实现。ConcreteClass,实现父类所定义的一个或者多个抽象方法。每个AbstractClass都可以有任意多个ConcreteClass与之对应,而每个ConcreteClass都可以给出这些抽象方法。模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法原创 2018-10-24 14:11:31 · 138 阅读 · 0 评论 -
设计模式-第十章-观察者模式
ISubject类,抽象通知者,一般用一个抽象类 或者接口实现。用来增加观察者, 移除观察者,通知IObserver类,抽象观察者,为所有具体观察者定义一个接 口,在得到主题的通知时更新自己 这个接口 叫更新接口Subject类,具体通知者,将有关状态存入具体观察者对象, 在具体通知者的内部状态改变时,给所有登记过的观察者发送通知Observer类,具体观察者类,实现抽象观察者角色所要求的更新接口,以便使本身的状态与通知者状态相协调当你使用图形用户界面类时通常会遇到一个问题。 比如, 你创建了自定义按钮类并原创 2022-01-23 20:54:49 · 214 阅读 · 0 评论 -
设计模式-第八章-外观模式
Facade类 外观类,提供了一种访问子系统的便捷方式AdditionalFacade类,其他与facade功能相对相关性的拓展功能集合,避免主facade被污染SubSystem类,若干子系统,不会意识到外观的存在,他们在系统内运作互相之间可以直接进行交互外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。Facade类AdditionalFacade类SubSystem 类 这里只写一个吧。其他雷同main...原创 2022-01-12 22:18:50 · 68 阅读 · 0 评论 -
设计模式-第十五章-组合模式
Component接口,描述了树中简单项目和复杂项目所共有的操作。Leaf类, 是树的基本结构, 它不包含子项目。一般情况下, 叶节点最终会完成大部分的实际工作, 因为它们无法将工作指派给其他部分。Composite类,是包含叶节点或其他容器等子项目的单位。 容器不知道其子项目所属的具体类, 它只通过通用的组件接口与其子项目交互。容器接收到请求后会将工作分配给自己的子项目, 处理中间结果, 然后将最终结果返回给客户端。组合模式为你提供了两种共享公共接口的基本元素类型: 简单叶节点和复杂容器。 容器中可以包含原创 2022-01-12 01:22:37 · 177 阅读 · 0 评论 -
设计模式-第十二章-状态模式
IState类,接口会声明特定于状态的方法。 这些方法应能被其他所有具体状态所理解, 因为你不希望某些状态所拥有的方法永远不会被调用。Context类,保存了对于一个具体状态对象的引用, 并会将所有与该状态相关的工作委派给它。 上下文通过状态接口与状态对象交互, 且会提供一个设置器用于传递新的状态对象。ConcreteState类,会自行实现特定于状态的方法。 为了避免多个状态中包含相似代码, 你可以提供一个封装有部分通用行为的中间抽象类。状态对象可存储对于上下文对象的反向引用。 状态可以通过该引用从上下文原创 2022-01-24 23:51:38 · 326 阅读 · 0 评论 -
设计模式-第十三章-适配器模式
Target类,这是客户期待的接口。可以是具体类或者抽象类或者接口。Adaptee类,需要适配的类。Adapter类,内部包装一个Adeptee对象,把源接口转换成目标接口。适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。系统的聚聚和行为都正确,但是接口不符合时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要用于希望复用一些现存的类,但是接口又与复用环境要求不一直的情原创 2021-12-04 19:50:45 · 105 阅读 · 0 评论 -
设计模式-第十四章-备忘录模式
Memento类, 是原发器状态快照的值对象 (value object)。 通常做法是将备忘录设为不可变的, 并通过构造函数一次性传递数据。Originator类可以生成自身状态的快照, 也可以在需要时通过快照恢复自身状态。Caretaker类, 仅知道 “何时” 和 “为何” 捕捉原发器的状态, 以及何时恢复状态。通过保存备忘录栈来记录原发器的历史状态。 当原发器需要回溯历史状态时, 负责人将从栈中获取最顶部的备忘录, 并将其传递给原发器的恢复 (restoration) 方法。备忘录模式是一种行为设计原创 2022-01-21 21:49:17 · 334 阅读 · 0 评论 -
设计模式-第九章-建造者模式
Product类,具体产品类,通常由多个部件组成。是个复杂的对象。Builder类,抽象建造者类,确定产品由若干个部件组成,并声明一个得到此产品建造完成后的产品的接口方法。ConcreteBuilder类,具体建造者。实现抽象建造者接口。也就是此产品的各个部件的具体构建方式。Director类,指挥者类。使用建造者接口的类。控制产品内部部件构造的顺序,组成方式等。建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。用户只需指定需要建造的类型就可以得到它们,原创 2018-11-19 11:00:34 · 191 阅读 · 0 评论 -
设计模式-第十八章-桥接模式
Implementor类,实现部分抽象出来的接口。ConcreteImplementorA,ConcreteImplementorB为Implement派生的类,为具体的实现。Abstraction类,抽象部分实现。RefinedAbstraction类,提炼出来的抽象部分。桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里并不是说,让抽象类与派生类分离,而是指,抽象类和它的派生类用来实现自己的对象。实现系统可能有多角度分类,每一种分类都有可能变化。那么就把这种多角度分离出原创 2022-01-10 01:49:26 · 183 阅读 · 0 评论 -
设计模式-第十六章-迭代器模式
Iterator 接口,声明了遍历集合所需的操作: 获取下一个元素、 获取当前位置和重新开始迭代等。IteratorCollection接口,声明一个或多个方法来获取与集合兼容的迭代器。 请注意, 返回方法的类型必须被声明为迭代器接口, 因此具体集合可以返回各种不同种类的迭代器。ConcreteIterator类,实现遍历集合的一种特定算法。 迭代器对象必须跟踪自身遍历的进度。 这使得多个迭代器可以相互独立地遍历同一集合。ConcreteCollection类,会在客户端请求迭代器时返回一个特定的具体迭代器原创 2022-01-17 20:14:58 · 80 阅读 · 0 评论 -
设计模式-第十九章-命令模式
Invoker类,类负责对请求进行初始化, 其中必须包含一个成员变量来存储对于命令对象的引用。 发送者触发命令, 而不向接收者直接发送请求。 注意, 发送者并不负责创建命令对象: 它通常会通过构造函数从客户端处获得预先生成的命令。Command 接口,声明一个执行命令的方法。ConcreteCommand类 ,接收对象执行方法所需的参数可以声明为具体命令的成员变量。 你可以将命令对象设为不可变, 仅允许通过构造函数对这些成员变量进行初始化。Receiver类, 类包含部分业务逻辑。 几乎任何对象都可以作为接原创 2022-01-13 20:43:57 · 162 阅读 · 0 评论 -
设计模式-第十七章-单例模式
Singleton类,定义一个GetInstance操作,允许客户访问它的唯一实例。 因为Singleton类封装它的唯一实例,这样它可以严格的控制客户怎么访问它以及何时访问它。简单的说就是对唯一实例的受控访问。c++ 饿汉式front end 以上例子为饿汉式单例最简单的一种写法,意在说明这类设计模式。其他实现不在这里讨论...原创 2018-10-29 16:45:22 · 195 阅读 · 0 评论 -
设计模式-第二十一章-中介者模式
Mediator接口,声明了与组件交流的方法, 但通常仅包括一个通知方法。 组件可将任意上下文 (包括自己的对象) 作为该方法的参数, 只有这样接收组件和发送者类之间才不会耦合。Component基类,是各种包含业务逻辑的类。每个组件都有一个指向中介者的引用, 该引用被声明为中介者接口类型。组件不知道中介者实际所属的类, 因此你可通过将其连接到不同的中介者以使其能在其他程序中复用。ConcreteComponent 类,具体组件类,实现组件基类的接口,不同组件具体功能ConcreteMediator类,具体原创 2022-01-17 22:32:40 · 106 阅读 · 0 评论 -
设计模式-第十一章-抽象工厂模式
AbstractProductA和AbstractProductB类,是抽象类。定义了该类型产品的相关操作。ConcreteProductA1、ConcreteProductA2、ConcreteProductB1和ConcreteProductB2类,是对以上抽象类的具体分类实现。各自通过不同的方式去实现该类产品的相关操作。AbstractFactory类是抽象工厂类,里面应该包含生产各类(A,B)产品的抽象方法。ConcreteFactory1和ConcreteFactory2类,具体工厂。生成分别生产原创 2018-10-30 17:30:20 · 179 阅读 · 0 评论 -
设计模式-第二十章-职责链模式
Handler类,声明了所有具体处理者的通用接口。 该接口通常仅包含单个方法用于请求处理, 但有时其还会包含一个设置链上下个处理者的方法。BaseHandler类,通常情况下, 该类中定义了一个保存对于下个处理者引用的成员变量。 客户端可通过将处理者传递给上个处理者的构造函数或设定方法来创建链。 该类还可以实现默认的处理行为: 确定下个处理者存在后再将请求传递给它。ConcreteHandler类,包含处理请求的实际代码。 每个处理者接收到请求后, 都必须决定是否进行处理, 以及是否沿着链传递请求。处理者通原创 2022-01-13 18:26:55 · 141 阅读 · 0 评论 -
设计模式-第二十二章-享元模式
Flyweight类 , 同一享元对象可在许多不同情景中使用。 享元中存储的状态被称为 “内在状态”。 传递给享元方法的状态被称为 “外在状态”。FlyweightFactory类,工厂会根据参数在之前已创建的享元中进行查找,如果找到满足条件 的享元就将其返回; 如果没有找到就根据参数新建享元。Context类,通常情况下,原始对象的行为会保留在享元类中。 因此调用享元方法必须提供部分外在状态作为参数。 但你也可将行为移动到情景类中, 然后将连入的享元作为单纯的数据对象。享元模式只是一种优化。 在应用该模式原创 2022-01-13 00:00:04 · 166 阅读 · 0 评论 -
设计模式-第二十三章-解释器模式
AbstractExpression 抽象表达式:声明一个抽象的解释操作,并定义一个抽象的解释方案,其具体的实现在各个具体的子类解释器中完成TerminalExpression 终结符表达式:实现文法中终结符有关的解释操作。文法中每一个终结符都有一个具体的终结表达式与之对应NoterminalExpression 非终结符表达式:实现文法中非终结符有关的解释操作Context 环境角色:上下文环境,包含解释器之外的全局信息概念:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解原创 2022-02-14 22:20:05 · 122 阅读 · 0 评论 -
设计模式-第二十四章-访问者模式
Visitor类,访问者接口声明了一系列以对象结构的具体元素为参数的访问者方法。 如果编程语言支持重载, 这些方法的名称可以是相同的, 但是其参数一定是不同的。Element类,元素接口声明了一个方法来 “接收” 访问者。 该方法必须有一个参数被声明为访问者接口类型ConcreteVisitor类,具体访问者会为不同的具体元素类实现相同行为的几个不同版本。ConcreteElement类,具体元素类 必须实现接收方法。 该方法的目的是根据当前元素类将其调用重定向到相应访问者的方法。 请注意, 即使元素基类实原创 2022-02-13 20:37:23 · 192 阅读 · 0 评论