![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
听说你是吴彦祖
这个作者很懒,什么都没留下…
展开
-
面向对象思想设计原则
(1)单一职责原则:高内聚,低耦合。•也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个。在设计模式中,所有的设计模式都遵循这一原则。(2)开闭原则:其核心思想是:一个对象对外扩展开放,对修改关闭。•其实开闭原则的意思就是:对类的改动是通过增加代码进行的,而不是修改现有代码。•也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直运行...原创 2018-04-26 22:11:33 · 148 阅读 · 0 评论 -
简单工厂模式和工厂方法模式适用场景
1、简单工厂模式:(1)工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。(2)客户端只知道传入工厂类的参数,对于如何创建对象并不关心。2、工厂方法模式(1)客户端不知道它所需要的对象的类。(2)抽象工厂类通过其子类来指定创建哪个对象。原创 2017-10-27 09:53:16 · 3272 阅读 · 0 评论 -
单例模式
1、单例模式单例模式 是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望系统中某个类的对象只能存在一个,单例模式是最好的解决方案。如操作系统的任务管理器,只需要一个即可,下次打开还是你上次打开的任务管理器。因此需要控制单例对象的个数。实现单例步骤原创 2017-10-27 11:02:49 · 145 阅读 · 0 评论 -
策略模式
策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。未使用策略的写法:使用策略的写法:#includeusing namespace std;//策略模式//武器策略class WeaponStrategy{public:virtual void UseW原创 2017-10-28 21:14:45 · 148 阅读 · 0 评论 -
命令模式
命令模式将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队而或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。原创 2017-10-28 21:41:53 · 101 阅读 · 0 评论 -
观察者模式
观察者模式随着信号灯的变化,汽车的行为也发生变化,一盏交通信号灯可以指挥多辆汽车。观察者模式是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,而其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者。如果5个英雄在打BOSS时,有一个英雄牺牲了,那么BOSS挂了之后原创 2017-10-31 10:59:07 · 199 阅读 · 0 评论 -
装饰模式
装饰模式装饰模式又叫包装模式,通过一种对客户端透明的方式来扩展对象功能,是继承关系的一种替代。装饰模式就是把要附加的功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择的、按顺序的使用装饰功能包装对象。比如:给小人穿衣服。可以穿背心,裤衩,裤兜子等。如果使用继承,小人需要继承背心,继承裤衩,继承裤兜子,这样继承关系复杂,代码维护起来不方便。原创 2017-10-31 11:38:52 · 152 阅读 · 0 评论 -
学习设计模式的目标
1、如何将代码分散在几个不同的类中?2、为什么要有“接口”?3、何为针对抽象编程?4、何时不应该使用继承?//降低耦合性,提高内聚性5、如果不修改源代码增加新功能?6、更好地阅读和理解现有类库与其他系统中的源代码。原创 2017-10-24 10:10:48 · 316 阅读 · 0 评论 -
面向对象设计原则
1、单一职责原则(Single Responsibility Principle,SRP):类的职责单一,对外只提供一种功能,而引起类变化的原因只有一个。2、开闭原则(Open-Closed Principle,OCP):类的改动是通过增加代码进行的,而不是修改源代码。3、里氏代换原则(Liskov Substitution Priinciple,LSP):任何抽象类出现的地方都可以用其他原创 2017-10-24 10:42:44 · 146 阅读 · 0 评论 -
开闭原则
#includeusing namespace std;//开闭原则 对扩展开放,对修改关闭。增加功能是通过增加代码来实现,而不是去修改源代码//写一个抽象类class AbstractCalculator{public:virtual int getResult() = 0;virtual void SetOperatorNum(int a,int b)原创 2017-10-24 15:35:21 · 182 阅读 · 0 评论 -
迪米特原则
#include#include#includeusing namespace std;//迪米特法则 又叫最少知识原则//如一个人买房子看楼盘。他不需要和楼盘A,楼盘B,楼盘C打交道,只需要和一个中间层进行交互就好,这个中间层他知道哪个楼盘好,哪个楼盘差。//这样操作可以降低用户和楼盘的耦合关系。//抽象基类class AbstractBuildi原创 2017-10-24 16:31:15 · 214 阅读 · 0 评论 -
合成复用原则
#includeusing namespace std;//合成复用原则:对于继承和组合,优先使用组合//抽象车class AbstractCar{public:virtual void run() = 0;};//大众车class DaZhong : public AbstractCar{public:virtual void原创 2017-10-24 17:07:11 · 209 阅读 · 0 评论 -
依赖倒转原则
//银行工作人员class BankWorker{public:void saveService(){cout}void payService(){cout}void tranferService(){cout}};//中间层模块void doSaveBussiness(BankWorker* worker){work原创 2017-10-24 21:29:47 · 162 阅读 · 0 评论 -
简单工厂模式
简单工厂模式中,用户想要A对象的话,只需要和工厂打交道,调用工厂接口CreateObject(),传入参数,让工厂知道应该创建什么类型对象,工厂帮你完成创建A对象的过程(new A ),这样做的优点是:1、客户端和具体实现类解耦,让工厂去完成和具体类耦合;2、对于某些对象创建过程比较复杂情况,我们不用考虑这些了;(例如A创建过程需要:读文件-解析文本-创建A对象-set属性值)。但这样原创 2017-10-25 11:37:49 · 176 阅读 · 0 评论 -
抽象工厂模式
工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来同一生长,这就是我们本文将要学习的抽象工厂模式的基本思想。。1、当我们想添加一个新产品的时候,比如葡萄,虽然不同修改代码,但是我们需要添加原创 2017-10-27 09:58:23 · 153 阅读 · 0 评论 -
工厂方法模式
工厂方法模式:从抽象工厂中派生出具体的工厂A,工厂B,分别负责类A和类B的创建。这样好处是符合开闭原则,再来一个class C,编写新功能函数即可。缺点是类越来越多,增加维护成本。简单工厂模式+“开闭原则”=工厂方法模式#includeusing namespace std;//工厂方法模式//抽象水果类class AbstractFruit原创 2017-10-27 09:20:20 · 126 阅读 · 0 评论 -
单例模式必看
/* * 单例模式: * 饿汉式:类一加载就创建对象(太饿了,要直接给我) * 懒汉式:用的时候,才去创建对象(太懒了,等到饿到不行了才去要对象) * * 面试题:单例模式的思想是什么?请写一个代码体现。 * * 开发:饿汉式(是不会出问题的单例模式)(开发用饿汉式,详见RunTime类的源码就是饿汉式的单例模式) * 面试:懒汉式(可能会出问题的单例模式) * A:懒加...原创 2018-04-27 12:16:51 · 146 阅读 · 0 评论