设计模式初探
文章平均质量分 66
帆心鼓吾
这个作者很懒,什么都没留下…
展开
-
简单工厂
//不符合开闭性原则,不是标准的设计模式,利用工厂类创建子类#include <iostream>using namespace std;class Fruit{public: virtual void getFruit() = 0;protected:private:};class Banana : public Fruit //实现关系{publ...原创 2018-05-01 20:52:44 · 228 阅读 · 0 评论 -
外观模式
外观类降低了客户端与子系统的耦合,也可以有多个外观类。#include <iostream>using namespace std;class A{public: void print_my() { cout << "A\n"; }};class B{public: void print_my() { cout << "B\...原创 2018-05-05 15:10:57 · 168 阅读 · 0 评论 -
享元模式
//享元模式(英语:Flyweight Pattern)是一种软件设计模式。它使用共享物件,用来尽可能//减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法//令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在//外部数据结构,当需要使用时再将它们传递给享元。 #include <iostream>#inclu...原创 2018-05-05 16:09:06 · 155 阅读 · 0 评论 -
模板方法模式
//父类抽象任务流程、子类实现功能细节#include<iostream>#include<string>using namespace std;class house{public: void print_house() { cout << door << endl; cout << window <...原创 2018-05-05 16:39:08 · 123 阅读 · 0 评论 -
命令模式
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合,这就是命令模式。#include <iostream>using namespace std;#in...原创 2018-05-06 10:44:19 · 189 阅读 · 0 评论 -
责任链模式
责任链模式,请求处理类包含指向父类(下家)的指针,在本单元无法处理时将请求传递给下家。#include <iostream>using namespace std;class request{public: request(int _need_speed) { need_seed = _need_speed; }public: int need_seed;}...原创 2018-05-06 11:52:45 · 288 阅读 · 0 评论 -
策略模式
策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式的优点有:策略模式提供了管理相关的算法族的办法、策略模式提供了可以替换继承关系的办法、使用策略模式可以避免使用多重条件转移语句。#include <iostream>using namespace std;class track{ virtual...原创 2018-05-06 15:54:33 · 172 阅读 · 0 评论 -
中介者模式
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。#include <iostream>using namespace std;#include "string"class Mediator;class Person{public: Person(string name, int ...原创 2018-05-06 16:35:27 · 157 阅读 · 0 评论 -
观察者模式
观察者模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。#include <iostream>using namespace std;#include "string"#include "list"class sent...原创 2018-05-06 17:44:28 · 203 阅读 · 0 评论 -
备忘录模式
定义:备忘录(Memento)模式又称标记(Token)模式。GOF给备忘录模式的定义为:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。#include <iostream>using namespace std;#include "string"//Caretaker 管理者// MememTo 备忘...原创 2018-05-06 21:31:16 · 179 阅读 · 0 评论 -
访问者模式
适用于: 把数据结构 和 作用于数据结构上的操作 进行解耦合;适用于数据结构比较稳定的场合#include <iostream>using namespace std;#include "list"// Visitor ParkElementclass ParkElement;class Visitor{public: virtual void visit(Pa...原创 2018-05-06 22:29:33 · 186 阅读 · 0 评论 -
状态模式
(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。#include <iostream>using namespace std;class Worker;class State...原创 2018-05-07 21:52:09 · 218 阅读 · 0 评论 -
解释器模式
解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。对比策略模式解释器模式代码:#include <iostream>#include <string>using namespace std;class myrotate{public: string& set_rotat...原创 2018-05-07 22:27:25 · 180 阅读 · 0 评论 -
迭代器模式
GOOD:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口。#include <iostream>using namespace std;// MyIterator Aggregate ContreteIterator ConcreteAggregate// a b c d// ...转载 2018-05-07 22:44:58 · 162 阅读 · 0 评论 -
组合模式
以单一对象和组合对象具有使用一致性,原理类似二叉树。#include <iostream>using namespace std;#include "string"#include "list"class IFile{public: virtual void display() = 0; virtual int add(IFile *ifile) = 0; virt...原创 2018-05-05 14:57:42 · 165 阅读 · 0 评论 -
桥接模式
//桥接模式,将抽象与实现分离,使之独立#include <iostream>using namespace std;class Fruit{public: virtual void make_product() = 0;};class AbstractFactory{public: AbstractFactory(Fruit* ptr) { ptrF...原创 2018-05-03 09:11:23 · 209 阅读 · 0 评论 -
原型模式
//原型模式,用于对象的自我复制#include<iostream>#include<string>using namespace std;class product{public: virtual product* my_clone() = 0; virtual void print() = 0; virtual ~product(){}; //虚...原创 2018-05-01 20:48:52 · 161 阅读 · 0 评论 -
建造者模式
//工厂模式将对象的产生由工厂类进行逻辑控制//建造者模式,多了一个设计者类,用于控制生产品的流程,适用于产品类较复杂,//目的在于复用设计者类(业务流程控制类)#include<iostream>#include<string>using namespace std;class house{public: void print_house() ...原创 2018-05-01 20:48:07 · 234 阅读 · 0 评论 -
工厂模式
//符合开闭性原则,标准的设计模式,面向接口编程,利用工厂类产生各种类型,扩展性强#include <iostream>using namespace std;class Fruit{public: virtual void getFruit() = 0;protected:private:};class Banana : public Fruit //...原创 2018-05-01 20:46:29 · 249 阅读 · 1 评论 -
抽象工厂
#include <iostream>using namespace std;class Fruit{public: virtual void SayName() = 0;};class AbstractFactory{public: virtual Fruit* CreateBanana() = 0; virtual Fruit* CreateApple...原创 2018-05-01 20:45:29 · 143 阅读 · 0 评论 -
单例模式
#include<iostream>#include<string>#include<thread>#include<mutex>#include<windows.h>using namespace std;std::mutex locker;//单例,构造函数私有化,保证初始化一次(懒汉式需保证线程安全)//1、...原创 2018-05-01 20:44:12 · 158 阅读 · 0 评论 -
设计模式原则
依赖倒置原则 面向抽象类编程,通过虚基类声明接口,通过继承实现接口(底层业务),逻辑控制类(经典模式类,高层逻辑控制),使得高层与底层届耦合,扩展性强。 软件系统中包含的各种组件,例如模块(Modules)、类(Classes)以及功能(Functions)等等,应该在不修改现有代码的基础上,引入新功能。开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功...原创 2018-05-01 20:41:19 · 156 阅读 · 0 评论 -
活动图
原创 2018-04-30 21:03:39 · 296 阅读 · 0 评论 -
时序图
一. 时序图 (Sequence Diagram)1.时序图的概念时序图定义 : 描述了对象之间传递消息的时间顺序, 用来表示用例中的行为顺序, 是强调消息时间顺序的交互图; 时序图描述的事物: 时序图描述系统中类和类之间的交互, 将这些交互建模成消息交换, 时序图描述了类以及类之间的交换以完成的期望行为的消息, 时序图中每条消息都代表了类的一个操作 或者 引起状态机改变的触发事件;时序图表示 :...转载 2018-04-30 21:02:30 · 1271 阅读 · 0 评论 -
类图
1、为什么需要类图?类图的作用类图(Class diagram)主要用于描述系统的结构化设计。类图也是最常用的UML图,用类图可以显示出类、接口以及它们之间的静态结构和关系。2、怎么画类图?用什么工具?使用工具:Visio或者processon在线作图 在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)以及类之间的关系。2.1 类(Class) 在面向对象(...原创 2018-04-30 20:43:26 · 37735 阅读 · 5 评论 -
用例图
一、什么是用例图?什么时候用到用例图?要了解用例图(use case diagram),先要清楚用例。什么是用例(use case)呢?用例简单的说就是在确定项目需求时,不展现系统内部结构的情况下对系统功能的描述,不过一个Use Case描述的是整个系统功能的一部分,这一部分一定要是在逻辑上相对完整的功能流程。用例图是在项目启动开始用到的图,它定义了系统的功能需求,它是从系统的外部看系统功能,并不...原创 2018-04-29 12:27:03 · 1574 阅读 · 0 评论 -
代理模式
如图,代理类与委托类均为客户类的实现,代理类可将委托类的功能做扩展,见代码://a 类包含b 类, a, b均实现协议类, 接口统一架构不变, 功能扩展//本质,使用兄弟类代码,继承虚函数重写用不了#include <iostream>using namespace std;class Fruit{public: virtual void getFru...原创 2018-05-02 20:58:37 · 194 阅读 · 0 评论 -
装饰模式
动态的给一个类添加功能,比生成子类更灵活,代理模式的扩展;#include <iostream>using namespace std;class Fruit{public: virtual void getFruit() = 0;protected:private:};class Banana : public Fruit //实现关系{public:...原创 2018-05-02 21:28:21 · 168 阅读 · 0 评论 -
适配器模式
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。#include <iostream>using namespace std;class Fruit{public: virtual void getFruit() = 0; //协议类规定的可用接...原创 2018-05-02 23:27:31 · 184 阅读 · 0 评论 -
软件开发流程
软件开发的基本过程,可以简单地分为需求分析,设计、(概要设计、详细设计)、编程、测试、和维护,及通常所说的软件生命周期。1、需求分析根据潜在的市场分析,或者通过对用户和潜在用户的调查,手机各方面的用户需求信息,了解用户需求中产品的功能、特性和性能,然后进行定义,确定软件产品所能到达的目标。软件产品需求分析是软件开发过程的第一个环节,也是最重要的一个环节,如果需求分析做不好,下面的设计、编程...原创 2018-08-05 08:57:36 · 460 阅读 · 0 评论