设计模式
班公湖里洗过脚
上马击狂胡,下马草军书
展开
-
C++设计模式24——模板方法模式
模板方法模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的接口即可重定义改算法的某些特定步骤。我结合我在实际开发项目中的一个例子来说说这个模板方法模式吧。我们曾经做过一款产品,这个产品类似于一个云端的文件管理客户端。对于这样的一个客户端,由于其云端的服务器有三种,而每一种服务器之间的通信方式和对外公开的接口都是不是一致的,这就需要实现的客户端要屏蔽云端服务器和转载 2019-12-04 00:16:38 · 737 阅读 · 0 评论 -
C++设计模式23——访问者模式
访问者模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对访问者模式是这样说的:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。该模式的目的是要把处理从数据结构分离出来。访问者模式让增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。现在再来说说我之前经历过的那个项目。转载 2019-12-03 10:27:17 · 637 阅读 · 0 评论 -
C++设计模式22——策略模式
策略模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。该模式使得算法可独立于使用它的客户而变化。策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用户需要知道各种算法的具体情况。就像上面的加班工资,不同的加班情况,有不同的算法。我们不能在程序中将计算工资的算法进行硬编码,而是能自由的变化的。这就是策略模式。转载 2019-11-15 19:57:48 · 413 阅读 · 0 评论 -
C++设计模式21——状态模式
前言在实际开发中,我们经常会遇到这种情况;一个对象有多种状态,在每一个状态下,都会有不同的行为。那么在代码中我们经常是这样实现的。转载 2019-11-14 10:00:47 · 368 阅读 · 0 评论 -
C++设计模式23——访问者模式
https://blog.csdn.net/CoderAldrich/article/details/83270301访问者模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对访问者模式是这样说的:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。该模式的目的是要把处理从数据结构分离出来。访问者模式让增加新的操作很容易,因为增加新的操作就意味着增加转载 2020-09-19 07:56:49 · 119 阅读 · 0 评论 -
C++设计模式22——策略模式
https://blog.csdn.net/CoderAldrich/article/details/83270248策略模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。该模式使得算法可独立于使用它的客户而变化。策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用户需要知道各种算法的具体情况。就像上面的加班工资,不同的加班情况,有不同的算法。我们不能在程序中将计算工资转载 2020-09-18 22:56:52 · 122 阅读 · 0 评论 -
C++设计模式21——状态模式
https://blog.csdn.net/CoderAldrich/article/details/83183733前言在实际开发中,我们经常会遇到这种情况;一个对象有多种状态,在每一个状态下,都会有不同的行为。那么在代码中我们经常是这样实现的。typedef enum tagState{ state, state1, state2}State; void Action(State actionState){ if (actionState转载 2020-09-18 12:50:09 · 133 阅读 · 0 评论 -
C++设计模式20——观察者模式
观察者模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者。转载 2019-11-12 16:15:56 · 340 阅读 · 0 评论 -
C++设计模式19——备忘录模式
备忘录模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对备忘录模式是这样说的:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。转载 2019-11-11 20:18:10 · 339 阅读 · 0 评论 -
C++设计模式18——中介者模式
https://blog.csdn.net/CoderAldrich/article/details/83272866C++设计模式——简单工厂模式C++设计模式——工厂方法模式C++设计模式——抽象工厂模式C++设计模式——单例模式C++设计模式——建造者模式C++设计模式——原型模式C++设计模式——适配器模式C++设计模式——桥接模式C++设计模式——组合...转载 2019-08-09 10:41:20 · 452 阅读 · 0 评论 -
C++设计模式17——迭代器模式
迭代器模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对迭代器模式是这样说的:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。转载 2019-04-20 11:20:36 · 205 阅读 · 0 评论 -
C++设计模式16——解释器模式
解释器模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对解释器模式是这样说的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。转载 2018-11-23 09:52:51 · 159 阅读 · 0 评论 -
C++设计模式15——命令模式
什么是命令模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对命令模式是这样说的:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单个请求封装成对象以后,我们就可以对这个请求存储更多的信息,使请求拥有更多的能力;命令模式同样能够把请求发送者和接收者解耦,使得命令发送者不用去关心请求将以何种方式被处理。转载 2018-08-22 09:41:53 · 169 阅读 · 0 评论 -
C++设计模式14——职责链模式
什么是职责链模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,直到有一个对象处理它为止;转载 2018-08-22 09:34:13 · 1388 阅读 · 0 评论 -
C++设计模式13——代理模式
什么是代理模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问。结合上面的游戏代理的例子和下面的图,我们来进行分析一下。以前你是这样玩游戏:现在有了游戏代理,你是这样玩游戏:代理服务器干了什么?它代替你去和游戏服务器进行交互。它访问游戏服务器的速度比你使用校园网访问游戏服务器的速度快很多。所以,你的游戏延迟就下来了。代理模式分为四类:远程代理,虚代理,保护代理和智能引用。在下面使用场合会对这四种进行分别介绍。转载 2018-01-30 17:48:44 · 164 阅读 · 0 评论 -
C++设计模式12——享元模式
什么是享元模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对享元模式是这样说的:运用共享技术有效地支持大量细粒度的对象。就如上面说的棋子,如果每个棋子都new一个对象,就会存在大量细粒度的棋子对象,这对服务器的内存空间是一种考验,也是一种浪费。我们都知道,比如我在2013号房间和别人下五子棋,2014号房间也有人在下五子棋,并不会因为我在2013号房间,而别人在2014号房间,而导致我们的棋子是不一样的。这就是说,2013号房间和2014号房间的棋子都是一样的,所有的五子棋房间的棋子都是转载 2018-01-30 17:17:04 · 149 阅读 · 0 评论 -
C++设计模式11——外观模式
什么是外观模式?外观模式,很多人也把它叫做门面模式。在GOF的《设计模式:可复用面向对象软件的基础》一书中对外观模式是这样说的:将子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。细细的理解这句话;子系统中的一组接口,就好比上面举得例子中的语法分析,生成中间代码,生成汇编代码,链接成可执行程序或库;外观模式定义的一个高层接口,就好比上面说的Build按钮,通过这样的一个Build按钮,让编译器更加容易使用,对于这一点,从Linux C++/C转Wind转载 2018-01-30 15:38:06 · 159 阅读 · 0 评论 -
C++设计模式10——装饰模式
什么是装饰模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对装饰模式是这样说的:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于转载 2018-01-30 14:19:22 · 146 阅读 · 0 评论 -
C++设计模式09——组合模式
什么是组合模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对组合模式是这样说的:将对象组合成树形结构以表示“部分-整体”的层次结构。组合(Composite)模式使得用户对单个对象和组合对象的使用具有一致性。转载 2017-12-30 22:04:23 · 188 阅读 · 0 评论 -
C++设计模式08——桥接模式
问题描述现在要去画一个图形,图形有长方形、圆形和扇形等等;而图形又可以加上不同的颜色,然后,我们就可以画出红色的长方形,绿色的长方形;红色的圆形,绿色的圆形等等。而这种图形的形状在变化,图形的颜色也在变化,当使用代码去实现时,如何面对这种多方面的变化呢?这就要说到今天的桥接模式了。 什么是桥接模式?对于上述的图形与颜色的问题时,很多时候,我们让各个图形类继承颜色类,比如:转载 2017-12-18 23:44:38 · 208 阅读 · 0 评论 -
C++设计模式07——适配器模式
生活中的适配器买笔记本电脑,买手机时,都有一个电源适配器,电源适配器又叫外置电源,是小型便携式电子设备及电子电器的供电电压变换设备,常见于手机,笔记本电脑上。它的作用是将家里的220V高电压转换成这些电子产品能工作的5V~20V左右稳定的低电压,使它们能正常工作。就是说,如果没有这个电源适配器,我们的手机和电脑就不能进行充电了。之前同事去日本出差,由于工作需要,就将自己的笔记本带过去了。到了的当晚就悲剧了,笔记本无法使用。由于日本的居民用电电压是110V,而中国是220V,同事的笔记本是220V供电转载 2017-09-16 17:12:10 · 902 阅读 · 0 评论 -
C++设计模式06——原型模式
什么是原型模式?在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这这个定义中,最重要的一个词是“拷贝”,也就是口头上的复制,而这个拷贝,也就是原型模式的精髓所在。举一个最简单的例子来说明原型模式:记得上小学的时候,老师把需要做的课外习题写到黑板上,而下面的我们都要把这些题抄写到自己的本子上,回家做好,第二天交上来,也就是每道题,全班50个人,每个人都要抄写一遍。按照现在的时间理论来说,就是浪费了50个人的时间。但是,那个时转载 2017-04-18 13:32:43 · 738 阅读 · 0 评论 -
C++设计模式05——建造者模式
建造者模式在GOF的《设计模式 可复用面向对象软件的基础》中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这句话,似懂非懂的。一个复杂对象的创建,其通常是由很多的子对象构成;如果一个对象能够直接就创建好了,那么也不会称之为复杂对象。由于项目中需求的变化,这个复杂对象的各个部分经常会发生剧烈的变化,但是,不管怎么变化,将它们组合在一起,组成一个复杂的对象的事实是不会变的。建造者模式就提供了一种“封装机制”来将各个对象的变化隔离开,最终,组合成复杂对象的过程是不会转载 2017-02-06 17:09:42 · 343 阅读 · 0 评论 -
C++设计模式04——单例模式
单件模式根据GOF的《设计模式:可复用面向对象软件的基础》中是这样描述的:保证一个类只有一个实例,并提供一个访问它的全局访问点。适用性在下面的情况下可以使用Singleton模式1,当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。2,当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需要更改代码就能使用一个扩展的实例时。原创 2017-01-20 23:16:28 · 286 阅读 · 0 评论 -
C++设计模式03——抽象工厂模式
何谓抽象工厂模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对工厂方法模式是这样说明的:提供一个创建一系统相关或相互依赖对旬的接口,而无需指定它们具体的类。它的别名是Kit (套件)原创 2016-09-02 20:23:24 · 417 阅读 · 0 评论 -
C++设计模式02——工厂方法模式
工厂方法模式是23个设计模式中创建型设计模式之一,在开发过程中也是用得比较广泛。下面我们来学习它的使用。何谓工厂方法模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对工厂方法模式是这样说明的:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。它的别名是虚构造器(Virtual Constructor)原创 2016-09-02 20:02:19 · 359 阅读 · 0 评论 -
C++设计模式01——简单工厂模式
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。原创 2016-09-01 09:45:53 · 301 阅读 · 0 评论