![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
I_O_fly
身为一个喜欢算法的小菜鸡,喜欢自己自学
展开
-
设计模式--单例模式(一)懒汉式和饿汉式
本文是设计模式学习笔记的第二篇文章,主要分析的是单例模式。包括懒汉式,饿汉式,登记式,以及懒汉式的改进型,还有一个关于读取propertoes配置文件的实例。预计分为三节。这是第一节,先分析最简单的懒汉式和饿汉式。单例模式是设计模式中比较简单的一种。适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同...转载 2018-02-16 18:27:57 · 161 阅读 · 0 评论 -
开闭原则
//开闭原则 对扩展放,对修改关闭,增加功能是通过增加代码来实现的,而不是去修改源代码//简单的问题复杂化,但是好维护和增加功能# include <iostream>using namespace std;//写一个抽象类class AbstractCaculator{public: virtual int getResult() = 0; virtual void setOpera...原创 2018-03-08 12:26:52 · 201 阅读 · 0 评论 -
命令模式
/*命令模式 将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作模式或事物模式。 命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。*/# include <iostream># incl...原创 2018-03-08 12:27:24 · 156 阅读 · 0 评论 -
模板方法模式
# include <iostream>using namespace std;/*定义一个操作中算法的框架而将一些步骤延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。优点:1)在父类中形式化地定义一个算法,而由它的子类来实现细节的处理,在子类实现详细的处理算法是并不会改变算法中步骤的执行次序。2)模板方法模式是一种代码复用技术,它在类库设计中...原创 2018-03-08 12:28:16 · 155 阅读 · 0 评论 -
设计模式基本概念
/*设计模式概述: 如果把修习软件开发当做武功修炼的话,那么可以分为招式和内功招式:编程语言,开发工具,开发技术,框架技术。内功:数据结构,算法,设计模式,重构,软件工程。设计模式定义: 设计模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。用大白话说:在一定环境下,用固定套路解决问题。软件设计模式的种类:GoF提出的设计模式公有23个,包括:创建型模式:如何创建对象;结构性模...原创 2018-03-08 12:29:12 · 496 阅读 · 0 评论 -
适配器模式
/*适配器模式: 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。*/# include <iostream># include <vector># include <algorithm>using namespace std;/*适配器模式就是将已经写好的接口,但是这个接口不符合需求将写好的接口转换成目标接...原创 2018-03-08 12:29:44 · 89 阅读 · 0 评论 -
外观模式
/*外观模式就是讲负责的子类系统抽象到同一个的接口进行管理,外界只需要通过此接口与子类系统进行交互,而不必要直接与复杂的子类系统进行交互。*/# include <iostream>using namespace std;//电视机类class Tevevision{public: void On() { cout << "电视机打开..." << endl;...原创 2018-03-08 12:32:25 · 155 阅读 · 0 评论 -
依赖倒转原则
//业务依赖于抽象层,实现层也依赖与抽象层//主要是多态# include <iostream>using namespace std;//银行工作人员class BankWorker{public: void saveService() { cout << "办理存款业务..." << endl; } void payService() { cout &l...原创 2018-03-08 12:33:06 · 100 阅读 · 0 评论 -
装饰模式
/*装饰模式 装饰模式又叫包装模式,通过一种对客户端透明的方式来扩展对象功能,是继承关系的一种替代。 装饰模式就是把要附加的功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择的、按顺序使用装饰功能包装。*/# include <iostream>using namespace std;//一般情况下,用继承实现类的功能扩展//装饰模式,可以动态给一个...原创 2018-03-08 12:33:40 · 130 阅读 · 0 评论 -
简单工厂模式
/*简单工厂模式: 里面有对象生产器*/# include <iostream># include <string>using namespace std;//抽象水果class AbstractFruit{public: virtual void ShowName() = 0;};//苹果class Apple : public AbstractFruit{ public...原创 2018-03-08 12:26:20 · 175 阅读 · 0 评论 -
合成复用原则
/*组成复用原则: 继承和组合优先使用组合*/# include <iostream>using namespace std;//抽象车class AbstractCar{public: virtual void run() = 0;};//大众车class Dazhong :public AbstractCar{public: virtual void run() { cout &...原创 2018-03-08 12:25:47 · 248 阅读 · 0 评论 -
抽象工厂方法模式
/*抽象工厂针对的是产品族,而不是产品等级结构*/# include <iostream>using namespace std;//抽象苹果class AbstractApple{public: virtual void ShowName() = 0;};//中国苹果class ChinaApple : public AbstractApple{public: virtual voi...原创 2018-03-08 12:19:34 · 116 阅读 · 0 评论 -
代理模式
/*代理模式 定义:为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以再客户端和目标对象之间起到中介的作用。*/# include <iostream># include <string>using namespace std;//提供一种代理来控制对其他对象的访问class AbstractCommonIn...原创 2018-03-08 12:20:20 · 153 阅读 · 0 评论 -
单例对象释放问题
/*class A{};A a;单例模式就是全局只有一个类A产生的对象不允许产生多个对象。1.static成员变量实现了同类对象间信息共享2.static成员类外存储,求类大小,并不包含在内3.static成员是命名空间属于累的全局变量,存储在data区4.static成员只能类外初始化5.可以通过类名访问(无对象生成时亦可),也可以通过对象访问*/# include <iostream&g...原创 2018-03-08 12:21:21 · 3599 阅读 · 1 评论 -
单例碰到多线程
# include <iostream>using namespace std;/*懒汉式碰到多线程,是线程不安全饿汗式是线程安全的,用饿汗式推荐用饿汗式,懒汉式的解决方法是加锁*///懒汉式class Singleton_lazy{private: Singleton_lazy() { cout << "我是懒汉式构造" << endl; }public: ...原创 2018-03-08 12:22:14 · 280 阅读 · 0 评论 -
迪米特法则
//迪米特法则 又叫最小知识原则//知道的越少,建立的耦合关系越低# include <iostream># include <string># include <vector>using namespace std;class AbstractBuliding{public: virtual void sale() = 0; virtual string ge...原创 2018-03-08 12:22:57 · 154 阅读 · 0 评论 -
工厂方法模式
//工厂方法模式/*简单工厂模式 + 开闭原则 = 工厂方法模式工厂方法模式的优缺点优点:1)不需要记住具体类名,甚至连具体参数都不用记忆。2)实现了对象创建和使用的分离。3)系统的可扩展性也就变得非常好,无需修改接口和原类。缺点:1)增加系统中类的个数,复杂度和理解度增加。2)增加了系统的抽象性和理解难度*/# include <iostream># include <stri...原创 2018-03-08 12:23:54 · 169 阅读 · 0 评论 -
关联关系
# include <iostream>using namespace std;//车class BMW{public: void run() { cout << "别摸我启动...快乐去上班..." << endl; }};/*关联关系:对于俩个相对独立的系统,当一个系统的实例与另一个系统的一些特定实例存在固定的对应关系时,这俩个系统之间为关联关系。关联关系...原创 2018-03-08 12:24:35 · 327 阅读 · 0 评论 -
观察者模式
/* 随着交通信号灯的变化,汽车的行为也将随之而变化,一盏交通信号灯可以指挥多辆汽车 观察者模式是用于建立一种对象与对象之间的依赖关系,一个对象发生改变是将自动通知其他对象,其他对象将相印做出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个*/# include <iostream># include <list>usin...原创 2018-03-08 12:25:08 · 134 阅读 · 0 评论 -
策略模式
/*策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换,策略模式让算法独立于使用它的客户而独立变化。*/# include <iostream>using namespace std;//抽象武器策略class WeaponStrategy{public: virtual void UseWeapon() = 0;};class Knife : public ...原创 2018-03-08 12:40:13 · 137 阅读 · 0 评论