![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
SunshineBoyLuXing
个人博客:https://08163356.github.io/aXingknowledgeRepo_3080/web/
展开
-
设计模式学习总结
1.设计模式目标使用分解和抽象来管理变化,提高复用2.设计模式的原则参考博客点击这里3.重构技巧静态->动态;早绑定->晚绑定;继承->组合;编译时依赖->运行时依赖;紧耦合->松耦合。4.c++对象模型设计模式常常是第三个对象模型。5.什么时候不用设计模式代码可读性很差读马丁弗勒的重构那本书能知道自己代码好还是坏,然后多看看第三方标准类库。变...原创 2019-12-16 11:33:56 · 183 阅读 · 0 评论 -
领域规则模式之Interpreter(解析器模式) | C++
一、领域规则模式之Interpreter(解析器模式)在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域获得一般性解决方案。//实例#include<iostream>#include<map>#include<stack>using namespace std;class Expr...原创 2019-12-15 21:02:52 · 208 阅读 · 0 评论 -
行为变化模式之Visitor(访问器模式) | C++
一、学前思考1.去银行办理业务得时候任意一个窗口都能办理业务2.实际上就是将数据结构和数据操作解耦3.这个模式用得比较少,水至清则无鱼(条件太苛刻),但是一旦用上整个结构都会被visitor模式所绑架。二、行为变化模式之Visitor(访问器模式)原始问题代码:class Visitor;class Element{public: virtual void Func1()...原创 2019-12-13 18:18:49 · 226 阅读 · 0 评论 -
行为模式之Command(命令模式) | C++
一、学前思考1.命令模式可以应用到撤回和反撤回功能的使用2.个人理解:命令模式就是把请求的执行请求的行为隔离二、行为模式之Command(命令模式)1.动机将行为实现着和行为请求者解耦,因为在诸如对行为进行“记录、撤销/反撤销(undo/redo)、事物”等处理中这种无法抵御变化的紧耦合是合适的。2.模式定义将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对...原创 2019-12-11 20:49:11 · 180 阅读 · 0 评论 -
数据结构模式之Chain of Responsibility(职责链模式) | C++
一、数据结构模式之Chain of Responsibility(职责链模式)1.模式定义使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理他为止。理解:定义讲得很清楚,如果一个请求有多个对象都能处理的话,就把多个对象排个优先级,形成一条链,请求的时候逐一询问,直到找到能处理他的对象。(怎么排序肯定也是有学问...原创 2019-12-09 11:39:22 · 153 阅读 · 0 评论 -
数据结构模式之Iterator(构造器模式)
一、学前思考1.什么是构造器?构造器可以用public、priviate、protected这样的关键词修饰。没有返回值构造方法是一种特殊的方法,与一般的方法不同是:1.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。2.构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。3.不能被static、final、synchron...原创 2019-12-06 11:47:58 · 360 阅读 · 0 评论 -
数据结构模式之Composite(组件模式)
一、学前思考1.什么是组件模式?猜想:(今天学习状态不是很好)2.设计模式设计原则就有一个继承转组合,是这么个意思吗?二、数据结构模式之Composite(组件模式)常常有一些组件在内部具有特定得数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定的数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问。1.动机如何将“客户代码...原创 2019-12-05 19:21:13 · 333 阅读 · 0 评论 -
状态变化模式之Memento(备忘录模式)
一、学前思考1.是对对象的行为做备份以免状态变化的时候数据更改或者发生其它变化导致原本的行为(行为其实就是函数)发生错误吗?二、状态变化模式之Memento(备忘录模式)在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了解决方案。1.动机在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求...原创 2019-12-04 09:39:01 · 125 阅读 · 0 评论 -
状态变化模式之State(状态模式)
一、学前思考1.什么是状态模式?猜想:状态模式是解决对象状态变化象关的问题?2.那对象变化是指什么样的变化呢?二、“状态变化”模式之State(状态模式)在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效管理?同时又维持高层模块的稳定?“状态变化模式”为这一问题提供了一种解决方案理解:状态变化模式是为了应对对象状态变化且维持高层模块稳定1.动机当项目中又多个状态时...原创 2019-12-02 16:47:02 · 431 阅读 · 0 评论 -
接口隔离模式之Mediator(中介者模式)
一、学前思考1.什么是中介者?猜想:找工作,找房子那样的中介吗?提供一个平台让两方进行交互?2.中介者常用在什么场景下?二、接口隔离模式之Mediator(中介者)在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案,1.动机在软件构建过程中,经常会出现多个对象互相关联交互的情况,...原创 2019-11-30 15:21:51 · 164 阅读 · 0 评论 -
接口隔离模式之Adapter(适配器模式)
一、学前思考1.什么是适配器?适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口理解:1)笔记本电源就是一个适配器,计算机需要的电源是恒定的,但是插座不一定(这个层面抽象出来就是将变化的东西通过适配器转换成恒定的事物)2)已完成的项目有需求变动更改接口很可能牵一发动全身,这时候可以使用适配器。3)电脑投影(HDML和...原创 2019-11-30 13:19:33 · 276 阅读 · 0 评论 -
接口隔离模式之Proxy(代理模式)
一、接口隔离模式之Proxy(代理模式)在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案1.动机在面向对象系统中,有些对象由于某些原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作(一致...原创 2019-11-30 10:29:27 · 317 阅读 · 0 评论 -
接口隔离模式之Facade(门面模式)
一、接口隔离模式之Facade(门面模式)再组件构建过程中,某些接口之间直接依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。(就相当于中间商)系统间的耦合复杂度1.动机上述A方案的问题在于组件的客户和组件中各种复杂子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临着很多变化的挑战。如何简化...原创 2019-11-28 18:43:15 · 707 阅读 · 0 评论 -
对象性能模式之Flyweight(享元模式)
一、对象性能模式之Flyweight(享元模式)面向对象很好地解决了抽象问题,但是必不可免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象带来的成本必须谨慎处理。1.动机在软件系统中采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价–主要指内存需求方面的代价如何在避免大量细粒度对象问题的同时,让外部客户程序仍然...原创 2019-11-28 17:13:02 · 135 阅读 · 0 评论 -
对象性能模式之Singleton(单例模式)
一、对象性能模式之Singleton(单例模式)面向对象很好地解决了“抽象”的问题,但是不可避免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。1.动机在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保他们的逻辑正确性、以及良好的效率(比如任务管理器)如何绕过常规的构造器,提供一种机制来...原创 2019-11-27 20:38:33 · 158 阅读 · 0 评论 -
对象创建模式之Builder(构建器模式)
一、对象创建模式之Builder(构建器模式)通过“对象创建”绕开new,来避免对象创建过程(new)中所导致的紧耦合(依赖具体类)1.动机在软件系统中,有时面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分进程面临着剧烈的变化,但是将他们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象...原创 2019-11-27 16:55:53 · 638 阅读 · 0 评论 -
对象创建模式之Prototype(原型模式)
一、对象创建模式之Prototype(原型模式)(用的相对较少,工厂方法和抽象工厂用的比较多)动机在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出这些易变的对象,从而使得“依赖这些易变对象的客户程序”不随着需求的改变而改变模式定义使用...原创 2019-11-22 16:12:15 · 235 阅读 · 0 评论 -
对象创建模式之Abstract Factory(抽象工厂)
一、对象创建模式之Abstract Factory(抽象工厂)动机在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合模式定义提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他...原创 2019-11-20 21:12:24 · 117 阅读 · 0 评论 -
对象创建模式之Factory Method(工厂方法模式)
一、对象创建模式之Factory Method(工厂方法模式)通过“对象创建”绕开new,来避免创建对象(new)过程中的紧耦合(依赖具体类),从而支持对象创建的稳定。他是接口抽象之后的第一步工作。1.1 动机在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种封装机制来避免客户程序和这种“...原创 2019-11-19 19:34:06 · 225 阅读 · 0 评论 -
单一职责模式之Bridge(桥模式)
一、单一职责模式之Bridge(桥模式)1.概念:在软件的组织设计中,如果责任划分得不清晰,是的继承得到得结果往往随着需求变化,子类极具膨胀,同时充斥着重复代码,这时候得关键就是划清责任。2.理解:使用继承增加功能会使得代码重复量太多。需要将责任划分清楚3.动机:由于某些固有的实现逻辑,使得他们具有两个乃至多个维度的变化。产生的问题:如何应对这种"多维度的变化"?如何利用面向对象技术来使得类...原创 2019-11-18 20:52:16 · 159 阅读 · 0 评论 -
单一职责模式之Decorator(装饰模式)
一、单一职责模式之Decorator(装饰模式)在软件组件的设计中,如果责任划分的不清晰,使用承得到的果是随着需求的变化,子类急剧膨胀,同时充斥着重代码,这时候的关键是划清责任。动机在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀...原创 2019-11-07 20:18:37 · 144 阅读 · 0 评论 -
组件协作模式之Observer/Event(观察者模式)
一、组件协作模式之Observer/Event(观察者模式)定义:定义对象一对多的依赖关系,以便于当一个对象的状态发生变化的时候,所有依赖于他们的对象都得到通知并自动更新。要点总结:使用面向对象抽的抽象,Observer模式使得我们能独立改变目标与观察者,从而使二者之间的依赖关系达到松耦合目标发送通知时,无需指定观察者,通知(可以携带通知信息作为参数)会自动传播观察者自己决定是否需要订...原创 2019-11-05 10:45:53 · 348 阅读 · 0 评论 -
「学习笔记」 11.3 | 设计模式(二) | Strategy(策略模式)
一、组件协作模式之策略模式1.动机:软件构造的过程中某些对象使用的算法可能是多种多样的,会经常改变。如果将算法都编码到对象中,将会使对象变得异常复杂。有时支持不使用的算法也是一种负担(多余算法代码被装载到内存而不被使用,就是一种负担,不是stratrgy的顺带好处,这方面主要不是他解决)。若不使用策略模式,会违反面向对象设计原则中的开闭原则:对拓展开放,对修改封闭。也就是使用拓展的方式去迎接需...原创 2019-11-03 15:53:39 · 202 阅读 · 0 评论 -
「学习笔记」 10.31 | 设计模式(一) | Template Method(模板方法)
一、GOF-23 设计模式分类这一块我没有学完,看也不太懂,网上很多,不做记录,等学习完再来看理解可能更深二、组件协作模式之模板方法通过晚期绑定来实现框架与应用之间的松耦合,让稳定中有变化。Template Method(模板方法)–应用广泛、最简单的一种模式定义:太繁琐,不记理解:类似java中的抽象类,规定一个抽象类的模板是什么样子的,只做声明不做实现,但是但凡继承抽象类里面的东西...原创 2019-10-31 20:10:51 · 366 阅读 · 0 评论 -
「学习笔记」设计模式 | 面向对象设计原则 | 反思
设计模式设计模式:前人对事物解决问题的核心进行总结,这样就可以一次又一次的使用而不用重复劳动了经典书籍:《设计模式:可复用面向对象软件的基础》一、面向对象设计原则前言:现在的很多设计模式(23种常用),有的已经被淘汰了、有的被语言的特性替代了、有的被框架囊括了,所以重点不是学透这么多种设计模式,而是理解面向对象设计原则,这样以后自己也能设计出一个设计模式。违背了这些设计模式原则,该模式就是...原创 2019-10-27 20:24:03 · 204 阅读 · 0 评论