![](https://img-blog.csdnimg.cn/20200414232556470.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
C++常见设计模式
CurryCoder
个人微信公众号:CurryCoder的程序人生
技术交流QQ群:1027579432
所有代码在此https://github.com/cdlwhm1217096231,欢迎各位小伙伴star、follow、fork
个人主页:https://cdlwhm1217096231.github.io/
展开
-
26 设计模式总结
技术交流QQ群:1027579432,欢迎你的加入!1.设计模式的学习目标管理变化,提高复用!2.设计模式的两个手段分解与抽象3.设计模式的八大原则依赖倒置原则(DIP)开放封闭原则(OCP)单一职责原则(SRP)Liskov替换原则(LSP)接口隔离原则(ISP)对象组合优于类继承封装变化点面向接口编程4.重构技法静态 → 动态早绑定 → 晚绑定继承 → 组合编译时依赖 → 运行时依赖紧耦合 → 松耦合5.从封装变化角度对模式进行分类组件原创 2020-05-17 16:07:11 · 904 阅读 · 0 评论 -
25Interpreter(解析器)模式
技术交流QQ群:1027579432,欢迎你的加入!1.领域规则模式在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域下的一般性解决方案。典型代表模式:Interpreter2.Interpreter(解析器)模式动机在软件构建过程中,如果某一特定领域的问题比较复杂,类似的结构不断重复出现。如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解原创 2020-05-16 11:33:47 · 270 阅读 · 0 评论 -
24Visitor(访问器)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Visitor(访问器)模式动机在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法)。如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题?2.Visitor(访问器)模式定义表示一个作用于能够对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作原创 2020-05-15 10:57:29 · 254 阅读 · 0 评论 -
23Command(命令)模式
技术交流QQ群:1027579432,欢迎你的加入!1.行为变化模式在组件的构建过程中,组件行为的变化经常会导致组件本身剧烈的变化。行为变化模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。典型的代表模式:CommandVisitor2.Command(命令)模式的动机在软件构建过程中,行为请求者与行为实现者通常呈现一种紧耦合。但在某些场合下,比如需要对行为进行记录、撤销、事务等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将行为请求原创 2020-05-14 16:16:12 · 333 阅读 · 0 评论 -
22.Chain of Responsibility(职责链)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Chain of Responsibility(职责链)模式动机在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接收者。如果显示指定,将必不可少地带来请求发送者与接收者之间的紧耦合。如何使请求的发送者不需要指定具体的接收者?让请求的接收者自己在运行时决定处理请求,从而使两者解耦。2.Chain of Responsibility(职责链)模式定义使多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦原创 2020-05-13 16:50:44 · 268 阅读 · 0 评论 -
21Iterator(迭代器)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Iterator(迭代器模式)动机在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户端代码透明地访问其中包含的元素。同时这种透明遍历也为同一种算法在多种集合对象上进行操作提供了可能。使用面向对象技术将这种遍历机制抽象为迭代器对象为应对变化中的集合对象提供了一种优雅的方式。2.Iterator(迭代器模式)定义提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)原创 2020-05-12 17:32:47 · 244 阅读 · 0 评论 -
20Composite(组合)模式
技术交流QQ群:1027579432,欢迎你的加入!1.数据结构模式常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候将这些特定数据结构封装在内部,在外部提供统一的接口来实现与特定数据结构无关的访问,是一种行之有效的解决方案。典型的代表模式:CompositeIteratorChain of Responsibility2.Composite(组合)模式的动机软件在某些情况下,客户端代码过多地依赖于对象容器复杂的内部实现结原创 2020-05-11 22:16:46 · 245 阅读 · 0 评论 -
18State(状态)模式
技术交流QQ群:1027579432,欢迎你的加入!1.状态变化模式在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?状态变化模式为这一问题提供了一种解决方案。状态变化模式的典型代表:StateMemento2.State(状态)模式的动机在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化。比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。如何在运行时根据对象的状态来透明地更改对象的行为?而不原创 2020-05-09 11:53:13 · 268 阅读 · 0 评论 -
17Mediator(中介者)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Mediator(中介者)模式的动机在软件构建过程中,经常会出现多个对象互相交互的情况,对象之间常常会维持一种复杂的引用关系。如果遇到一些需求的更改,这种直接的引用关系将面临着不断的变化。在这种情况下,我们可以使用一个中介对象来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。2.Mediator(...原创 2020-05-08 16:48:26 · 237 阅读 · 0 评论 -
16Adapter(适配器)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Adapter(适配器)模式的动机在软件系统中,由于应用环境的变化,常常需要将一些现存的对象放在新的环境中应用,但是新环境要求的接口是这些现存对象所不能满足的。如何应对这种迁移的变化?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?2.Adapter(适配器)模式的定义将一个类的接口转换成客户希望的另一个...原创 2020-05-08 16:02:52 · 277 阅读 · 0 评论 -
15Proxy(代理)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Proxy(代理)模式的动机在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者或系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理或控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。2.Proxy(代理)模式的定义为其...原创 2020-05-07 21:26:29 · 329 阅读 · 0 评论 -
14Facade(门面)模式
技术交流QQ群:1027579432,欢迎你的加入!1.接口隔离模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口来隔离本来互相紧密关联的接口是一种常见的解决方案。典型代表:FacadeProxyAdapterMediator2.Facade(门面)模式动机上述A方案的问题在于组件的客户和组件中各种复杂的子...原创 2020-05-06 16:45:41 · 235 阅读 · 0 评论 -
13Flyweight(享元)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Flyweight(享元)模式动机在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指的是内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?2.Flyweight(享元)模式定义运用共享技术有效地支持大量细粒度...原创 2020-05-06 16:45:07 · 216 阅读 · 0 评论 -
12Singleton(单例)模式
技术交流QQ群:1027579432,欢迎你的加入!1.对象性能模式面向对象很好地解决了抽象的问题,但是必不可免地要付出一定的代价。对于通常情况来说,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。对象性能模式的典型代表:SingletonFlyweight2.Singleton(单例)模式动机在软件系统中,经常有这样的一些特殊类,必须保证...原创 2020-05-03 11:36:12 · 312 阅读 · 0 评论 -
11Builder(构建器)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Builder(构建器)模式动机在软件系统中,有时候面临着一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成。由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种封装机制来隔离出复杂对象的各个部分的变化。从而保持系统中的稳定构建算法不随着需求的改变...原创 2020-05-02 21:00:02 · 307 阅读 · 0 评论 -
10Prototype(原型)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Prototype(原型)模式动机在软件系统中,经常面临着某些结构复杂对象的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向客户程序(使用这些对象的程序)隔离出这些易变对象,从而使得依赖这些易变对象的客户程序不会随着需求改变而变化?2.Prototype(原型)模式...原创 2020-05-01 20:44:31 · 559 阅读 · 0 评论 -
09Abstract Factory(抽象工厂)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Abstract Factory(抽象工厂)模式动机在软件系统中,经常面临着一系列相互依赖的对象的创建工作。同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种封装机制来避免客户程序和这种多系列具体对象创建工作的紧耦合?2.Abstract Factory(抽象工厂...原创 2020-04-26 21:36:35 · 251 阅读 · 0 评论 -
08Factory Method(工厂方法)模式
技术交流QQ群:1027579432,欢迎你的加入!1.对象创建模式通过对象创建模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定,它是接口抽象之后的第一步工作。典型的代表模式:Factory MethodAbstract FactoryPrototypeBuilder2.Factory Method(工厂方法)模式的动机...原创 2020-04-26 09:15:10 · 356 阅读 · 0 评论 -
07Bridge(桥)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Bridge(桥模式)动机由于某些类型的固有实现逻辑,使得它们具有两个变化的维度,乃至多个维度的变化。如何应对这种多维度的变化?,如何利用面向对象技术使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?2.Bridge(桥模式)定义将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。3...原创 2020-04-24 22:47:12 · 287 阅读 · 0 评论 -
06Decorator(装饰)模式
技术交流QQ群:1027579432,欢迎你的加入!1.单一职责模式在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀。同时充斥着重复代码,这时候的关键是划清责任。2.单一职责模式的典型代表Decorator(装饰)模式Bridge(桥)模式3. Decorator(装饰)模式的动机在某些情况下,我们可能会过度地使用继承来扩展对象...原创 2020-04-18 10:12:51 · 236 阅读 · 0 评论 -
05Observer/Event(观察者)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Observer/Event(观察者)模式动机在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”—— 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将会使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系,从而实现软件体系机构...原创 2020-04-17 11:33:01 · 334 阅读 · 0 评论 -
04Strategy(策略)模式
技术交流QQ群:1027579432,欢迎你的加入!1.Strategy(策略)模式的动机在软件构建过程中,某些对象使用的算法可能有多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得十分复杂,而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地改变对象的算法?将算法与对象本身解耦,从而避免上述问题?2.Strategy(策略)模式定义定义一些列算法,...原创 2020-04-16 17:30:44 · 281 阅读 · 0 评论 -
03Template Method模式
技术交流QQ群:1027579432,欢迎你的加入!1.从封建角度变化对23种设计模式分类组件协作:Template Method、Strategy、Observer/Event单一职责:Decorator、Bridge对象创建:Factory Method、Abstract Factory、Prototype、Builder对象性能:Singleton、Flyweight接口隔离:...原创 2020-04-16 16:36:48 · 273 阅读 · 0 评论 -
02面向对象设计原则
技术交流QQ群:1027579432,欢迎你的加入!1.为什么需要面向对象设计变化是复用的天敌!面向对象设计最大的优势在于抵御变化!2.重新认识面向对象理解隔离变化从宏观层面上来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小;各司其职从微观层面上来看,面向对象的方式更强调各个类的“责任”;由于需求变化导致的新增类型不应该影响原来类型的实现——是...原创 2020-04-15 22:17:47 · 277 阅读 · 0 评论 -
01设计模式简介
技术交流QQ群:1027579432,欢迎你的加入!1.从面向对象谈起底层思维:向下,如何把握机器底层从微观理解对象构造。语言构造编译转换内存模型运行时机制抽象思维:向上,如何将我们周围的世界抽象为程序代码。面向对象组件封装设计模式架构模式2.深入理解面向对象向下:深入理解面向对象的三大机制封装:隐藏内部实现继承:复用现有代码多态:改变对象行为...原创 2020-04-15 16:16:22 · 247 阅读 · 0 评论