软件设计模式
Amber_LYP
这个作者很懒,什么都没留下…
展开
-
访问者模式
一、定义访问者模式:表示一个作用于某对象结构的各元素的操作。它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作。二、实现代码三、测试代码四、运行结果...原创 2020-03-17 13:04:09 · 127 阅读 · 0 评论 -
状态模式
一、定义状态模式: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。二、实现代码代码中分为3种类型的类实现:A)State抽象基类:主要是用来封装一个状态类需要的接口。B)真实的状态类RealState_x:完成该状态的功能实现与切换到下一个状态。C)Context类:对外开放的接口类,并且负责具体状态类的切换(对每个状态的维护)。 三、测试代码四、...原创 2020-03-16 19:58:09 · 104 阅读 · 0 评论 -
策略模式
一、定义外观模式:提供一个统一的接口给客户端使用,对于客户端来说,不需要了解该接口是如何访问子系统的接口的。二、实现代码三、测试代码四、运行结果...原创 2020-03-16 17:09:07 · 82 阅读 · 0 评论 -
中介模式
一、定义用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。二、实现代码三、测试代码四、运行结果五、优缺点优点:各个类中的解耦。缺点:中介类会越来越复杂,会比较难维护。...原创 2020-03-13 17:59:28 · 167 阅读 · 0 评论 -
代理模式
一、定义代理模式就是为其他对象提供一种代理以控制对这个对象的访问。这样实现了业务和核心功能的分离。二、实现代码三、测试代码四、运行结果五、有什么优缺点A)优点:智能化、高扩展性、职责比较清晰B)缺点:对于客户端来说,增加了代理层,访问数据的时候会相对慢一些。...原创 2020-03-13 15:54:08 · 81 阅读 · 0 评论 -
装饰者模式
一、定义需要对一个类动态的增加功能,而不需要对原来类进行修改。简言之,装饰者与被装饰者的基类是一样的。二、代码实现三、测试代码四、运行结果五、与适配器模式的区别适配器模式是为了修改类的接口而实现。而装饰者是为了增加原来类的功能,使其更加的完美。...原创 2020-03-13 10:56:36 · 54 阅读 · 0 评论 -
模板方法模式
一、定义模板方法模式是指在基类中将方法的结构定义好,可以在基类实现,也可以不实现。基类中的纯虚函数必须在子类中实现,虚函数的话,子类可视其情况而定。总而言之呢,就是基类定义好方法的骨架,把方法的实现延迟到子类。二、实现代码三、测试代码四、运行结果...原创 2020-02-28 14:54:12 · 81 阅读 · 0 评论 -
迭代器模式
一、定义迭代器模式:为了遍历容器(聚合对象)内的元素,而不需要暴露容器(聚合对象)内部的表示。迭代器就是提供这种遍历的方法来遍历容器(聚合对象)。二、实现代码代码中分为4部分来实现。Iterator迭代器抽象类,Container容器抽象类,CorrectIterator具体迭代器,CorrectContainer具体容器类。三、测试代码四、运行结果...原创 2020-02-27 15:56:55 · 94 阅读 · 0 评论 -
原型设计模式
一、定义原型设计模式:实现对原对象的拷贝,这里实现的事深拷贝,就是拷贝了原对象之后,及时原对象修改或者内存释放了,都不会对副本有影响,因为副本有自己独立的内存空间。二、代码实现三、测试代码四、运行结果...原创 2020-02-27 11:42:23 · 98 阅读 · 0 评论 -
解释器模式
一、定义解释器模式是一个语法解释器(相当于一个翻译官)。给定一个语法,需要定义一个语法规则和一个解释器。解释器根据定义的语法(文法)规则来解释。二、代码实现三、测试代码四、运行结果...原创 2020-01-17 15:13:55 · 166 阅读 · 0 评论 -
享元模式
一、定义享元模式:Flyweight的内部状态是用来共享的,Flyweightfactory负责维护一个Flyweight池(存放内部状态的对象),当客户端请求一个共享Flyweight时,这个factory首先搜索池中是否已经有可适用的,如果有,factory只是简单返回送出这个对象,否则,创建一个新的对象,加入到池中,再返回送出这个对象.池为重复或可共享的对象、属性设置一个缓冲,称为内部状态...原创 2020-01-16 17:47:12 · 94 阅读 · 0 评论 -
门面设计模式
一、定义门面设计模式:为子系统中的一组接口提供一个一致的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。对外使用一个统一接口,只要通过这个对象就可以实现所有的功能,对用户来说是透明的。二、代码实现三、测试代码四、运行结果...原创 2020-01-16 11:47:00 · 120 阅读 · 0 评论 -
备忘录模式
一、定义备忘录模式:在不违背封装性的前提下,将类对象的状态数据保存到类对象之外,在需要恢复该对象到保存的状态数据时,直接将这些数据重新加载进去。例如:游戏。我们在玩游戏的时候,游戏数据是保存到一个文件中,当我们退出游戏再进入的时候,需要从文件中恢复数据,然后继续游戏。二、实现代码1、需要保存的数据2、游戏数据3、对保存的数据进行操作三、测试代码四、运行结果...原创 2019-12-26 21:56:50 · 98 阅读 · 0 评论 -
组合模式
一、定义组合模式:整体与部分的行为必须要是一致的,整体与部分需要继承一个公共的类,这个公共的类是整体与部分共同的行为,通过一个操作可以完成整体的所有部分。就类似于,点、线、面的操纵。二、实现代码三、测试代码四、运行结果...原创 2019-12-26 17:23:01 · 69 阅读 · 0 评论 -
命令模式
一、定义将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单个请求封装成对象以后,我们就可以对这个请求存储更多的信息,使请求拥有更多的能力;命令模式同样能够把请求发送者和接收者解耦,使得命令发送者不用去关心请求将以何种方式被处理。二、实现代码三、测试...原创 2019-12-25 20:23:10 · 73 阅读 · 0 评论 -
责任链模式
一、定义责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。二、实现代码20 //消息处理者的抽象类,主要是由消息处理和设置下一个处理者的方法21 class Handler22 {23 public:24 virtual void HandlerReque...原创 2019-12-25 16:01:40 · 90 阅读 · 0 评论 -
桥梁模式
一、定义桥梁模式:将角色的构建和实现完全分离,使得构建和实现能够随意改变。实现是一个抽象类(接口类),实现类表示的事角色的属性与方法。构建是角色的抽象部分,主要是表示角色能够做什么操作。二、代码实现1、分为Implementer、ImplemenerInstance、Abstraction和RefineAbstraction来实现桥梁模式。A:Implementer:实现角色接口B:I...原创 2019-12-24 20:43:13 · 70 阅读 · 0 评论 -
适配器模式
一、定义适配器模式:将一个接口转换为用户期望的接口。分为类适配器模式和对象适配器模式两种。二、代码实现1、用户期望的接口(Target)与需要适配的接口(Adapee)1、类适配器模式类适配器模式:是通过public继承来实现对Target类的Print方法实现接口继承,然后通过private继承对Adapee类实现实现继承。2、对象适配器模式:通过public对Target类的P...原创 2019-12-24 17:56:31 · 56 阅读 · 0 评论 -
建造者模式
一、定义建造模式:将一个复杂对象的构建与表示分离,使同样的构建过程可以创建不同的表示。二、代码实现三、测试代码四、运行结果原创 2019-12-24 17:00:28 · 158 阅读 · 0 评论 -
工厂模式
工厂模式有三种类型:简单工厂模式、工厂模式和抽象工厂模式~1、简单工厂模式:将运算和工厂分为两个部分,只有工厂类才能决定生产哪一个子类。代码实现如下:测试代码:执行结果如下:2、工厂模式:工厂模式是在简单工厂模式的基础上改的,比起简单工厂模式更加的低耦合。将运算和工厂都抽象为一个接口类,这个时候工厂模式的子类就可以控制创建对象了,运算部分和简单工厂模式一样。代码实现如下:测试代...原创 2019-12-24 15:04:49 · 109 阅读 · 0 评论 -
单例模式&观察者模式
最近开始学习软件开发的23种模式,今天先总结一下单例模式和观察者模式,其他的会陆续更新~一、单例模式 什么是单例模式呢?单例模式就是这个类中只能有一个全局对象,就像每个班级只会有一个班主任一样。单例模式将类的构造函数设置为私有,提供一个static 对象,和一个static 方法来获取这个对象的方法。c++代码实现如下:测试代码如下:运行结果如下:二、观察者模式首先谈谈什么是观...原创 2019-12-20 17:36:35 · 520 阅读 · 1 评论