![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 66
coder-HRQ
课题分离
展开
-
UML类图
(本博客旨在个人总结回顾)<阅读大话设计模式知识点记录>五分钟读懂UML类图转载 2018-03-28 16:49:40 · 2440 阅读 · 0 评论 -
装饰模式(C++实现)
(本博客旨在个人总结回顾)1、详情:装饰模式:动态地给一个对象添加一些额外的职责,就扩展功能而言,装饰模式比生成子类更为灵活。说明:何时使用:在不想增加很多子类的情况下扩展类。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点:多层装饰比较复杂。使用场景:①扩展一个类的功能。 ②动态增加功能,动态...原创 2019-07-26 17:43:25 · 258 阅读 · 0 评论 -
命令模式(C++实现)
(本博客旨在个人总结回顾)1、详情:命令模式:将一个请求封装成对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。说明:优点:①降低了系统耦合度。 ②新的命令可以很容易添加到系统中去。缺点:使用命令模式可能会导致某些系统有过多的具体命令类。使用场景:认为是命令的地方都可以使用命令模式,比如: ①GUI 中每一个按钮都是一条命令。 ②...原创 2019-08-05 16:47:06 · 224 阅读 · 0 评论 -
解释器模式(C++实现)
(本博客旨在个人总结回顾)1、详情:解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。说明:优点:①可扩展性比较好,灵活。②增加了新的解释表达式的方式。③易于实现简单文法。缺点:①可利用场景比较少。②对于复杂的文法比较难维护。③解释器模式会引起类膨胀。 ④解释器模式采用递归调用方法。使用场...原创 2019-08-05 20:00:08 · 482 阅读 · 0 评论 -
共享模式(C++实现)
(本博客旨在个人总结回顾)1、详情:共享模式:运用共享技术有效支撑大量细粒度的对象。说明:优点:大大减少对象的创建,降低系统的内存,使效率提高。缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。2.1、UML类图:2.2、例子源码stdafx.h// stdaf...原创 2019-08-01 20:08:05 · 464 阅读 · 0 评论 -
代理模式(C++实现)
(本博客旨在个人总结回顾)1、详情:代理模式:为其他对象提供一个代理以控制对这个对象的访问。说明:优点:①职责清晰。 ②高扩展性。 ③智能化。缺点:①由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 ②实现代理模式需要额外的工作,有些代理模式的实现非常复杂。使用场景:按职责来划分,通常有以下使用场景: ①远程代理。 ②虚拟代...原创 2019-08-02 12:22:15 · 575 阅读 · 0 评论 -
迭代器模式(C++实现)
(本博客旨在个人总结回顾)1、详情:迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而有不暴露该对象的内部表示。说明:优点:①它支持以不同的方式遍历一个聚合对象。②迭代器简化了聚合类。③在同一个聚合上可以有多个遍历。④在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。缺点: 由于迭代器模式将存储数据和遍历数据的职责分...原创 2019-08-07 12:35:29 · 213 阅读 · 0 评论 -
观察者模式(C++实现)
(本博客旨在个人总结回顾)1、详情:观察者模式:定义对象间一种一对多的依赖关系,以便当该对象状态发生改变时,所有依赖它的对象都得到通知并自动刷新。说明:优点:①观察者和被观察者是抽象耦合的。②建立一套触发机制。缺点:①如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。②如果在观察者和观察目标之间有循环依赖的话,观察目标会触...原创 2019-08-14 11:43:17 · 1042 阅读 · 0 评论 -
中介者模式(C++实现)
(本博客旨在个人总结回顾)1、详情:中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。说明:优点:①降低了类的复杂度,将一对多转化成了一对一。②各个类之间的解耦。③符合迪米特原则。缺点:中介者会庞大,变得复杂难以维护。使用场景:①系统中对象之间存在比较复杂的引用关系,导...原创 2019-08-07 17:54:36 · 833 阅读 · 0 评论 -
备忘录模式(C++实现)
(本博客旨在个人总结回顾)1、详情:备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原保存的状态。说明:优点:①给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。②实现了信息的封装,使得用户不需要关心状态的保存细节。缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的...原创 2019-08-07 20:05:57 · 223 阅读 · 0 评论 -
状态模式(C++实现)
(本博客旨在个人总结回顾)1、详情:状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎改变了它所属的类。说明:主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。优点:①封装了转换规则。②枚举可能的状态,在枚举状态之前需要确定状态种类。③将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需...原创 2019-08-14 16:11:39 · 355 阅读 · 0 评论 -
策略模式(C++实现)
(本博客旨在个人总结回顾)1、详情:策略模式:定义一系列算法,把它们一个个封装起来,使得它们可以相互替换。策略模式使得算法变化可独立于使用它的用户。说明:优点:①算法可以自由切换。②避免使用多重条件判断。③扩展性良好。缺点:①策略类会增多。②所有策略类都需要对外暴露。2.1、UML类图:2.2、例子源码stdafx.h// st...原创 2019-08-14 17:34:25 · 1620 阅读 · 0 评论 -
模板方法模式(C++实现)
(本博客旨在个人总结回顾)1、详情:策略模式:定义一个操作中的算法骨架,将一些步骤延时到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。说明:主要解决:一些方法通用,却在每一个子类都重新写了这一方法。优点:①封装不变部分,扩展可变部分。②提取公共代码,便于维护。③行为由父类控制,子类实现。缺点:每一个不同的实现都需要一...原创 2019-08-14 18:23:02 · 175 阅读 · 0 评论 -
组合模式(C++实现)
(本博客旨在个人总结回顾)1、详情:组合模式:将对象组合成树形结构以表示"部分--整体"的层次结构。composite使得客户对单个对象和复合对象使用具有一致性。说明:何时使用:在需求中是体现部分与整体层次的结构是,以及在我们希望用户可以忽略组合对象和单个对象的不同,统一地使用组合结构中的所有对象时,此时就可以考虑组合模式。优点:①高层模块调用简单。 ②节点自由增加。缺点...原创 2019-07-26 16:14:14 · 255 阅读 · 0 评论 -
外观模式(C++实现)
(本博客旨在个人总结回顾)1、详情:外观模式:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层次接口,这个接口使得这一子系统更容易使用。说明:何时使用:①设计初期有意识的将不同的两个层分离。②开发阶段子系统因为不断重构演化而变的越来越复杂。③维护一个遗留的大型系统时,在这个系统以及非常难以维护和扩展,但开发需求又不得不使用它的时候。优点:使耦合性大大减低,...原创 2019-07-30 19:38:31 · 127 阅读 · 0 评论 -
简单工厂模式(C++实现)
(本博客旨在个人总结回顾)目录1、详情:2、应用:3、UML类图:4、代码实现:1、详情:简单工厂模式(静态工厂方法模式)并不属于Gof中的23设计模式之一。简单工厂模式包含三个角色:①工厂类角色:这是本模式的核心,含有一定的判断逻辑,根据逻辑不同产生具体的工厂产品。例子中的:MyAlgorithmFactory②抽象产品类角色:一般为具体产品继承的父类或者...原创 2018-03-28 18:01:58 · 2844 阅读 · 0 评论 -
设计模式之开放封闭原则
(本博客旨在个人总结回顾)1.概念:软件实体(类、模板、函数等等)应该可以扩展,但是不可修改。实例:(1)简单工厂模式违反了该原则,当新增类型类时需要添加工厂类中的case分支。简单工厂模式例子UML类图:(2)工厂模式遵循了该原则。当新增处理类型时,新增类继承对应的接口,保证了功能的扩展,原本的类也不会被修改。工厂模式例子UML类图:...原创 2018-08-14 23:31:32 · 2621 阅读 · 0 评论 -
设计模式学习之路(C++实现)
(本博客旨在个人总结回顾)1、概括: 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、增强代码可读性、保证代码可靠和易扩展。2、类型:(GOF 23种设计模式)2.1 创建型模式:2.1.1 工厂方法模式(Factory Pattern)(建议了解一下简单工厂模式)简要说明:定义一个用于创建对象的接口,让...原创 2019-08-15 16:48:30 · 2529 阅读 · 0 评论 -
工厂方法模式(C++实现)
(本博客旨在个人总结回顾)建议先看一下简单工厂模式,因为我的例子是在简单工厂模式上修改的。1、详情:工厂方法模式包含四个角色:①抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者是必须继承的父类。(本例中的Factory)②具体工厂类角色:包含和具体业务逻辑相关的代码。由应用程序调用来创建对应的具体产品。(本例中的AddFactory,Su...原创 2019-05-21 22:39:03 · 208 阅读 · 0 评论 -
抽象工厂模式(C++实现)
(本博客旨在个人总结回顾)1、详情:抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。角色:抽象工厂角色:这是抽象工厂模式的核心,它与应用程序无关。是具体工厂角色必须实现或继承的的父类。具体工厂角色:包含具体业务逻辑有关的代码。由应用程序调用来创建对应的具体产品对象。它由具体的类来实现。抽象产品角色:具体产品实现或继承的父类。具体产品角色...原创 2019-05-29 12:23:52 · 678 阅读 · 0 评论 -
建造者模式(C++实现)
(本博客旨在个人总结回顾)1、详情:建造者模式:将一个复杂对象与它的表示分离,使得同样的构建过程可以创建不同的表示。优点:①建造者独立,易扩展。 ②便于控制细节风险。缺点:①产品必须有共同点,范围有限制。 ②如内部变化复杂,会有很多的建造类。使用场景:①需要生成的对象具有复杂的内部结构。 ②需要生成的对象内部属性本身相互依赖。注意事项:与抽象工厂模式的区别是:建造者模...原创 2019-06-13 14:48:38 · 816 阅读 · 0 评论 -
单例模式(C++实现)
(本博客旨在个人总结回顾)1、详情:单例模式:保证类仅有一个实例,并提供一个访问它的全局访问点。分类:懒汉式:类的实例在使用的使用才创建。(多线程使用双检锁解决线程安全问题)饿汉式:类文件加载的时候创建实例,在没有使用类的情况下造成资源浪费。特点与选择:①对于访问量比较大情况,采用饿汉式实现,可以实现更好的性能(获取实例时无需加锁),以空间换时间。②对于访问量较小,...原创 2019-06-12 12:19:53 · 213 阅读 · 0 评论 -
原型模式(C++实现)
(本博客旨在个人总结回顾)1、详情:原型模式:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。说明:①根据定义原型模式是通过拷贝一个现有对象生成新对象的,这样可以直接拷贝某个状态下的新对象,减少了对象的初始化和对该状态下对象的赋值,提高效率。②原型模式与拷贝构造函数,赋值运算符重载函数的关系:原型模式通俗讲就是克隆,复制一个新的对象。而拷贝构造函数和赋值运算符...原创 2019-07-10 10:24:22 · 655 阅读 · 0 评论 -
适配器模式(C++实现)
(本博客旨在个人总结回顾)1、详情:适配器模式:将一个类接口转为换客户希望的另一个接口。Adapter模式使得由于接口不兼容的不能一起工作的那些类可以一起工作。使用场景:主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。说明:根据使用场景可以推断出适配器模式一般不是在软件设计初期设计的,而是在后期为了解决接口不兼容的情况,(不兼容可能第三方接口或者由于其他原因导...原创 2019-07-17 15:13:50 · 199 阅读 · 0 评论 -
桥接模式(C++实现)
(本博客旨在个人总结回顾)1、详情:桥接模式:将抽象部分与它实现部分分离,使它们都可以独立地变化。说明:主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。关键代码:抽象类依赖实现类。优点:①抽象和实现的分离。...原创 2019-07-17 19:46:52 · 311 阅读 · 0 评论 -
职责链模式(C++实现)
(本博客旨在个人总结回顾)1、详情:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。说明:优点:①降低耦合度。它将请求的发送者和接收者解耦。②简化了对象。使得对象不需要知道链的结构。③增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新...原创 2019-08-02 15:41:52 · 197 阅读 · 0 评论 -
访问者模式(C++实现)
(本博客旨在个人总结回顾)1、详情:访问者模式:表示一个作用于某对象结构中各元素的操作。它可以使你在不改变这些元素的类的前提下,定义作用于这些元素的新操作。说明:优点:①符合单一职责原则。②优秀的扩展性、灵活性。缺点:①具体元素对访问者公布细节,违反了迪米特原则。②具体元素变更比较困难。③违反了依赖倒置原则,依赖了具体类,没有依赖抽象。使用场景:...原创 2019-08-15 16:47:58 · 273 阅读 · 0 评论