设计模式
Woosual
做着算法的研究却想搞软开
展开
-
15 大话设计模式C++实现之抽象工厂模式
/*抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类*//*实例:不同客户的数据库管理采用不同的数据库完成,不同的数据库在语法上存在差异,因此需要解除用户和具体数据库之间的耦合(即业务逻辑与数据访问的解耦),避免向不同类型的客户提供支持时的代码复用*/#include<iostream>#include<string>...原创 2020-01-28 12:06:45 · 246 阅读 · 0 评论 -
14 大话设计模式C++实现之观察者模式
/*观察者模式(又叫发布-订阅模式)定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有的观察者对象*//*例子:有员工在上班时间看电影、NBA、股票等与工作无关的内容,前台可以给员工发送通知,因此所有的员工通过监听受监测对象即可对自身的工作做出调整同样的,老板也需要通知一些业务内容,因此例子主要让在干不同事的员工监听前台类和...原创 2020-01-09 15:45:26 · 197 阅读 · 0 评论 -
13 大话设计模式C++实现之建造者模式
例子说明1:炒菜没放盐和肯德基的标准化例子说明2:画一个不同形态的小人(高矮胖瘦各不同)/*建造者模式(生成器模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式可以将一个产品的内部表象与产品的生成过程分隔开来,从而可以使一个建造过程生成具有不同的内部表象的产品。如果我们使用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到他们,...原创 2019-12-19 19:54:51 · 152 阅读 · 0 评论 -
12 大话设计模式C++实现之外观模式
/*外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子系统更加容易使用其中外观类需要了解所有子系统的方法或属性,对它进行组合,以备外界调用。何时使用外观模式:首先,在设计阶段初期,应该有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层、业务逻辑层和表示层的层与层之间建立Facade,这样可以为系统提供一个简单的接口,使...原创 2019-12-19 19:48:45 · 166 阅读 · 0 评论 -
迪米特原则
/*迪米特原则(强调类之间的松耦合)如果两个类不必彼此通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的方法的话,就可以通过第三者转发这个调用。迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类...原创 2019-12-19 19:12:45 · 150 阅读 · 0 评论 -
10 大话设计模式C++实现之模板方法模式
/*模板方法模式是实现一个模板父类,父类实现所有重复的代码让子类可以修改父类维持的元素或者函数,子类可以利用多态、根据需要重写父类*/#include <iostream>#include <string>using namespace std;typedef string(*PFUNC) ();class TemplateClass{public:...原创 2019-12-19 19:00:29 · 135 阅读 · 0 评论 -
09 大话设计模式C++实现之原型模式9.3&9.4
9.3 原型模式:#include<iostream>#include<string>using namespace std;/*用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,原型模式实际上就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节一般在初始化信息不发生变化的情况下,克隆是最好的办法。这样既隐藏了对象创建的细...原创 2019-12-17 20:31:49 · 183 阅读 · 0 评论 -
08 大话设计模式C++实现之工厂方法模式
简单工厂UML工厂方法模式UML(多了一个工厂基类)----------→ 依赖关系实现如下:#include<iostream>#include<string>#include<stdexcept>using namespace std;/*书中的例子: 雷锋生病了,由雷锋的同学们去照顾老人*///首先来实现工厂方法...原创 2019-12-16 20:53:46 · 160 阅读 · 0 评论 -
07 大话设计模式C++实现之代理模式
# 类图/*代理模式:例子:追女生让别人帮忙送礼物,就是通过代理完成业务代理实现接口,代理类关联于追求者类,也就是说代理的业务主要取决于请求者代理与请求者实现相同的接口,因此利用纯虚函数实现接口类*/#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using nam...原创 2019-12-16 19:10:20 · 220 阅读 · 0 评论 -
06 大话设计模式C++实现之装饰模式
/*把所需的功能按照正确的顺序串联起来进行控制例子:QQ秀的装扮,我们不关心穿衣服的过程,只需要看到结果,同样一个QQ人物,我可以不用重新定义person类,仅对装扮进行改变同时,不同装扮也是一个对象,将这些对象作用到QQ人物上面可能会经常存在变化,因此不应该将变化在person类中实现,通过复用person类,动态的加载装扮类。同时装扮的过程中存在一些重复的操作,如穿上当前的衣服,脱掉当...原创 2019-12-16 16:18:09 · 127 阅读 · 0 评论 -
05 大话设计模式C++实现之依赖倒转原则
/*依赖倒转原则:抽象不应该依赖于细节,细节应该依赖与抽象。也就是说要针对接口编程而不是针对实现编程A. 高层模块不应该依赖于底层模块。两个都应该依赖于抽象B. 抽象不应该依赖于细节,细节应该依赖于抽象*///动物类的抽象#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;...原创 2019-12-15 20:12:50 · 158 阅读 · 0 评论 -
03 04 大话设计模式C++实现之拍摄UFO和求职考研两不误——单一职责原则和开闭原则
/*单一职责原则拍摄UFO, 单一职责原则就一个类而言,应该仅有一个引起它变化的原因比如我们写一个窗体应用程序,一般都会生成一个Form1这样的类,于是我们就把各种各样的代码,像某种商业运算的算法啊,访问数据库的SQL语句等都写到这样的类中,就意味着无论什么样的需求都需要改这个窗体类,这其实很糟糕,维护很麻烦,复用不可能,也缺乏灵活性如果一个类承担过多的职责,就等于把这些职责耦合到一...原创 2019-12-15 19:33:57 · 160 阅读 · 0 评论 -
02 大话设计模式C++实现之商场促销——策略模式
/*策略模式(商场促销):算法时常改变,它定义了算法家族,分别封装起来,让他们之间可以相互替换此模式让算法的变化不会影响使用算法的客户*/#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using namespace std;//定义一个抽象类算法class Stra...原创 2019-12-12 20:45:32 · 304 阅读 · 0 评论 -
01 大话设计模式C++实现之简单工厂模式
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<stdexcept>using namespace std;//业务的封装过程让业务逻辑与界面逻辑分开,从而使程序容易修改、易于复用//通过类的封装、继承、多态将程序的耦合度降低//Operation运算类class Operation...原创 2019-12-12 20:27:11 · 150 阅读 · 0 评论