设计模式
学了面向对象,不会设计,大忌大忌
甜甛恬栝湉铦i
这个作者很懒,什么都没留下…
展开
-
设计模式 - 组合模式
设计模式- 组合模式组合模式定义:将对象组合成树形结构以表示“部分和整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.优点:高层模块调用简单,组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象还是组合对象。缺点:在使用组合模式时,其子节点和树枝节点都是实现类,而不是接口,违反了依赖倒置原则,设计起来麻烦。实现#include<cstdio>#include<cmath>#include<map>#原创 2020-07-22 19:41:38 · 138 阅读 · 0 评论 -
设计模式--备忘录模式
设计模式–备忘录模式备忘录模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可对该对象恢复到原来的状态。在玩象棋或者五子棋的时候,常会遇到要悔棋情况,一步二步还好,可以记下来,但是如果从一开始就把所有走的步骤都记下来,属实很困难(不仅仅下棋,就比如我们编程所用的编译器,excel,word等等,都有撤销还原的功能)。现在如果我们用编程,可以想象...原创 2020-05-07 14:16:12 · 225 阅读 · 0 评论 -
设计模式--观察者模式
设计模式–观察者模式观察者模式定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象(事件)。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以自动更新自己。做游戏开发时常会用到这个模式,比如说:玩家升级时会触发一系列的事件(是否加属性点,是否开启新的任务,是否开启新的系统,是否可以领取新的任务,是否达成某些奖励领取的要求等等),再比如说,玩家登录时,...原创 2020-04-28 16:10:22 · 78 阅读 · 0 评论 -
设计模式---建造者模式
设计模式-建造者模式建造者模式我们下馆子吃饭的时候,都会发现不同家的做同样的菜味道差别很大,菜味道的不同则就取决于厨子的想法和手法,还有就是厨子做同一个菜品的时候,可能心情不好,做出来的菜也会天差地别。但是再去吃KFC,麦当劳的时候,我们发现味道差不多都一个味,不论在全国各地。因为KFC这种快餐店做食物的一套流程,既保证了效率,又保证了味道基本上一致。这里就用到了我们即将要说的建造者模式。...原创 2020-04-27 11:02:32 · 144 阅读 · 0 评论 -
设计模式--外观模式
外观模式外观模式定义定义:为子系统提供了一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口是的子系统使用更加方便。uml图:#include<iostream>#include<algorithm>#include<string>using namespace std;class subsystemone{ public: ...原创 2020-04-20 15:56:02 · 96 阅读 · 0 评论 -
设计模式--原型模式
原型模式原型模式定义定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。看uml图:原型模式就是将对象再创建一个定制对象,而且我们不需要知道创建的细节。原型模式c++实现由于c++中没有像c#那样ICloneable接口,所以我们可以自己定义一个clone接口类。我们举一个栗子:简历的复制,我现在需要简历,正常来说我们需要建立一个简历类,设置个人信息,公司经历...原创 2020-03-25 16:53:18 · 186 阅读 · 0 评论 -
设计模式--工厂方法模式
工厂方法模式工厂简单工厂设计原创 2020-03-12 20:16:07 · 97 阅读 · 0 评论 -
设计模式---代理模式(实现一)保护代理
代理模式保护代理保护代理其实是一个静态代理,本文用c++实现。关于动态代理例子,求恕在下功底尚浅,c++太难实现了。一个例子:现在有一个订单系统,要求是:一旦订单被创建,只有订单的创建人才可以修改订单中的数据,其他人不能修改。相当于现在如果有了一个订单对象实例,那么就需要控制外部对它的访问,满足条件的可以访问,而不满足条件的就不能访问了。先画uml图:我们定义了OrderApi抽...原创 2020-03-12 14:02:01 · 331 阅读 · 0 评论 -
设计模式---代理模式
代理模式定义:字面意思就是为其他对象提供一种代理以控制对这个对象的访问。当客户端得到代理对象时,对客户端并没有影响,就和得到真实对象一样正常使用。当客户端操作这个代理对象时,实际上功能最终还是由真实对象来完成,只不过是通过代理操作的,也就是客户端操作代理,代理操作真正的对象。正是因为有了代理对象夹在客户端和被代理的真实用户,代理就相当于一个中转站,所以就可以在代理中转过程前,先判断一个权限...原创 2020-03-11 20:07:34 · 116 阅读 · 0 评论 -
设计模式-装饰模式
装饰模式这里只讲一些理论上的东西,实现将会在接下来几篇文章具体展开,有兴趣,可以一起研究讨论吖!!!下面进入正题。定义:动态地给对象添加一些额外的功能且不改变其结构。就增加功能这一点,装饰模式要比增加子类灵活。接下来看下装饰模式的结构图:模块大概代码如下:#include<cstdio>#include<cstdlib>#include<ctim...原创 2020-03-07 17:06:32 · 71 阅读 · 0 评论 -
设计模式-装饰模式(实现三)
装饰模式买奶茶案例:先看uml图:DrinkMilkTea类是我们的顶层接口,定义了两个方法,一个显示这杯奶茶多钱,一个显示用了什么材料。MilkTea类就是我们要定义的具体对象类,负责显示一杯基本奶茶多钱。而我们的Material类就是我们的抽象Decorate类了。代码如下:建议自己copy到本地跑一下呢。QAQ#include<cstdio>#include&l...原创 2020-03-07 16:55:06 · 118 阅读 · 0 评论 -
设计模式-装饰模式(实现一)
装饰模式实现一个穿衣服的程序:先看uml图:因为我们这里只有concreteconponent类 也就是Person类,并没有抽象类Conponent类,所以就可以让Decorate类也就是Clothes是Person的一个子类。同理如果只有一个concreDecorate类,就不用在单独建造一个Decorate类。下面是代码,可以copy到本地跑一下。#include<cs...原创 2020-03-07 10:03:27 · 115 阅读 · 0 评论 -
设计模式-装饰模式(实现二)
#include<cstdio>#include<cstdlib>#include<ctime>#include<string>#include<iostream>#include<algorithm>using namespace std;class Person{ private : string na...原创 2020-03-06 21:23:38 · 112 阅读 · 0 评论 -
设计模式-三大类型
设计模式包含了三种类型:创建型模式: 创建对象的同时隐藏创造逻辑的方式,而不是直接使用new运算符直接实例化对象,包含如下几种模式:简单工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式。结构型模式:更关注类和对象的组合,继承这一个概念被用来组合接口和定义组合对象获得功能的方式。包含如下几种模式:外观模式,适配器模式,桥接模式,过滤器模式,组合模式,装饰器模式,代理模式,享元模式。行为...原创 2020-03-06 15:38:12 · 194 阅读 · 1 评论 -
设计模式-几大重要原则
设计模式-重要原则单一职责原则 (SRP).开放-封闭原则(OCP).依赖倒转原则(DIP).里氏代换原则(LSP).迪米特法则(LOD).接口隔离原则(ISP).单一职责原则定义:就一个类而言,应该仅有一个引起它变化的原因。一个类/接口/方法只负责一个职责。思想:如果一个类承担的职责太多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其它职责的能...原创 2020-03-04 20:25:58 · 154 阅读 · 0 评论 -
设计模式-策略模式
什么是策略模式?策略模式是一种定义一系列算法的方法,从概念上来看,所以的算法完成都是相同的工作,只是实现不同。它可以以相同方式调用所有的算法,减少了各种算法类与使用算法类的耦合。我们用书里面的例子演示一下:假如超市的售货员给顾客结账时,她应该如何选择那种结算方式呢?假如有:满100减20,满300减70,打5折等等。我们想,如果用正常的逻辑语句应该怎么写:if(money>=100...原创 2020-03-02 17:48:47 · 146 阅读 · 0 评论 -
uml图
UML图是一种将软件密集系统进行可视化的建模语言。主要应用于开发阶段,说明,可视化,构建和书写面向对象工程项目开放的方法。我们以这篇文章的为例:工厂设计模式我们可以设计出的UML图:由于目前CSDN不支持类图,我们就手动写这个图代表了一个类,分为三层,第一层是类名,如果是抽象类且用斜体表示。第二层是类的特性,通常指字段和属性。第三层指的是类的操作,也就是类所包含的方法或者行为。前面...原创 2020-01-14 21:01:20 · 184 阅读 · 0 评论 -
设计模式-简单工厂设计
面向对象的设计模式——简单的工厂设计实现这个“工厂设计”之前,先重温一下面向对象的东西:C++的默认构造方式是 类名();析构函数则是 ~类名();目的在构造函数执行完程序后,对象过期后,程序自动调用析构函数来完成清理工作。如果创建的是静态存储类对象,析构函数会在程序结束后自动调用。如果创建的是自动存储类对象,其析构函数将在程序执行完成代码块自动调用。如果对象是new创建的,则它将驻留在堆栈...原创 2020-01-14 19:47:29 · 117 阅读 · 0 评论