设计模式
设计模式实战演练,高级程序员进阶必经之路
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
mz5111089
这个作者很懒,什么都没留下…
展开
-
Python 迭代模式
# -*- coding: utf-8 -*-"""Created on Thu Mar 29 11:43:05 2018@author: mz"""class Iterator(object): def Next(self): pass def HasNext(self): pass def First(self): ...原创 2018-03-29 15:28:31 · 371 阅读 · 0 评论 -
Python 备忘录模式
Created on Sun Mar 18 00:30:51 2018@author: mz"""class Original(object): def save(self, state): print("save status: %s" %(state)) self.__status = state def get(se...原创 2018-03-18 00:49:07 · 257 阅读 · 0 评论 -
Python 适配器模式
# -*- coding: utf-8 -*-"""Created on Sun Mar 18 00:08:14 2018@author: mz"""class Target(object): def charge(self, adaptor): print("110V charge on 220V->") adaptor...原创 2018-03-18 00:14:35 · 243 阅读 · 0 评论 -
Python 抽象工厂
# -*- coding: utf-8 -*-"""Created on Sat Mar 3 21:56:58 2018@author: mz"""class IFactory(object): def ProduceB(self): pass def ProduceA(self): pass class...原创 2018-03-18 00:07:24 · 218 阅读 · 0 评论 -
Python 桥接模式
# -*- coding: utf-8 -*-"""Created on Thu Mar 15 12:01:02 2018@author: mz"""class Phone(object): def setGame(self, rhs): self.game = rhs class IOSPhone(Phone): def playGa...原创 2018-03-18 00:05:57 · 144 阅读 · 0 评论 -
Python 中介模式
# -*- coding: utf-8 -*-"""Created on Thu Mar 15 15:26:07 2018@author: mz"""class Mediator(object): def declare(self, msg, owner): self.__receiver.receive(msg) def ...原创 2018-03-18 00:04:16 · 275 阅读 · 0 评论 -
Python 之工厂方法
# -*- coding: utf-8 -*-"""Created on Sat Mar 3 21:42:27 2018@author: mz"""class IFactory(object): def Product(self): pass class IMethod(object): def DoAsIMean(self): ...原创 2018-03-03 21:55:14 · 1352 阅读 · 0 评论 -
备忘录C++实现
备忘录应用场景,比较经典的就是游戏备份。不确定下一步结果怎么发展,可提前备份当前状态。备份类: #include "StdAfx.h"#include "Memo.h"#include iostream>using namespace std;Memo::Memo(void){}Memo::~Memo(void){}void Memo::原创 2018-02-07 09:48:08 · 1536 阅读 · 0 评论 -
适配器C++实现
适配器模式主要用于临时接口处理。比方说出去旅游,电脑充电器,国内标准220V输入,国外有240V或110V。这个时候就需要临时准备适配器。目标类: #pragma onceclass Target{public: Target(void); virtual ~Target(void); virtual void Charge(void)原创 2018-02-07 09:43:11 · 234 阅读 · 0 评论 -
Python 状态模式
# -*- coding: utf-8 -*-"""Created on Mon Feb 26 20:45:13 2018@author: mz"""class Status(object): def Handle(self, rhs): pass class AStatus(Status): def Handle(self, rhs): ...原创 2018-02-26 21:38:55 · 149 阅读 · 0 评论 -
Python 访问者模式
# -*- coding: utf-8 -*-"""Created on Thu Mar 29 16:52:56 2018@author: mz"""class Aggregate(object): def __init__(self): self._elmlst = [] def Attach(self, elm): sel...原创 2018-03-29 19:25:27 · 201 阅读 · 0 评论 -
Python 解析器模式
# -*- coding: utf-8 -*-"""Created on Thu Mar 29 19:26:13 2018@author: mz"""class Context(object): def SetContect(self, rhs): self.context = rhs def GetContext(self): ret...原创 2018-03-29 19:58:14 · 384 阅读 · 0 评论 -
Python 建造者模式
# -*- coding: utf-8 -*-"""Created on Thu Mar 29 10:19:38 2018@author: mz"""class Director(object): def Build(self, builder): builder.BuildFloor() builder.BuildWindow...原创 2018-03-29 11:00:20 · 301 阅读 · 0 评论 -
Python 享元模式
# -*- coding: utf-8 -*-"""Created on Wed Mar 28 20:41:17 2018@author: mz"""class Share(object): def __init__(self): self.d = {} def Attach(self, key, value): if key...原创 2018-03-28 20:55:32 · 166 阅读 · 0 评论 -
Python 原型模式
# -*- coding: utf-8 -*-"""Created on Wed Mar 28 19:41:57 2018@author: mz"""from copy import copy, deepcopyclass Prototype(object): def Clone(self): pass def DeepClone(sel...原创 2018-03-28 20:33:21 · 208 阅读 · 0 评论 -
Python 观察者模式
# -*- coding: utf-8 -*-"""Created on Wed Mar 28 18:50:47 2018@author: mz"""#observerclass Boss(object): def __init__(self): self.obj = []; def Attach(self, employee): ...原创 2018-03-28 19:40:11 · 164 阅读 · 0 评论 -
Python 模板方法
# -*- coding: utf-8 -*-"""Created on Tue Mar 27 17:08:14 2018@author: mz"""class Template(object): def Excute(self): self.ReadyRead() self.ReadyWrite() def Read...原创 2018-03-27 17:14:49 · 287 阅读 · 0 评论 -
Python 外观模式
# -*- coding: utf-8 -*-"""Created on Tue Mar 27 16:56:43 2018@author: mz"""class Facade(object): def TradeWar(self): a = ASubject() b = BSubject() c = CSubject() ...原创 2018-03-27 17:06:48 · 205 阅读 · 0 评论 -
Python 单例模式
# -*- coding: utf-8 -*-"""Created on Mon Mar 26 19:40:24 2018@author: mz"""import threadingclass Singleton(object): _instance_lock = threading.Lock() def __init__(self): pass...原创 2018-03-27 11:54:44 · 966 阅读 · 0 评论 -
Python 代理模式
# -*- coding: utf-8 -*-"""Created on Mon Mar 26 19:17:20 2018@author: mz"""class Person(object): def ShowLove(self): passclass Girl(Person): def ShowLove(self): pass...原创 2018-03-26 19:34:49 · 126 阅读 · 0 评论 -
Python 命令模式
# -*- coding: utf-8 -*-"""Created on Mon Mar 26 17:17:02 2018@author: mz"""class ICommand(object): def __init__(self, rhs): self.rcv = rhs def Excute(self): passc...原创 2018-03-26 18:51:23 · 323 阅读 · 0 评论 -
外观模式C++实现
外观模式用于接口对接处理,为执行一个功能,需要不同的子系统分别执行对应功能。 外观类: #include "StdAfx.h"#include "Facade.h"#include "SubSystemA.h"#include "SubSystemB.h"#include "SubSystemC.h"#include "SubSystemD.原创 2018-02-12 09:14:55 · 122 阅读 · 0 评论 -
Python 责任链模式实现
# -*- coding: utf-8 -*-"""Created on Mon Feb 26 11:45:46 2018@author: mz"""class Handler(object): def __init__(self): self.handler = None def Handle(self): pass ...原创 2018-02-26 14:15:52 · 231 阅读 · 0 评论 -
访问者模式C++实现
解释器模式,可理解的场景有,五线谱解读为哆啦咪发唆西多,翻译,名词解释等。可交叉解析,也可用一种解析器解析。待解析内容: #pragma once#include <iostream>using namespace std;class InterContext{public: InterContext(void); ~InterContext(void); Inte...原创 2018-02-11 15:05:38 · 217 阅读 · 0 评论 -
抽象工厂C++实现
抽象工厂应用场景表现为多个工厂有多个生产线(操作类),生产线又有多种。表现为多对多的情况。一个工厂有多个生产线,工厂又有多个,每家工厂的生产线又有共性。 但是具体的每个工厂,会绑定其对应的生产线,为一一对应关系。结构图:抽象工厂: #pragma once#include "IOperator.h"#include "IOtherOperator.h原创 2018-02-06 09:46:30 · 208 阅读 · 0 评论 -
工厂方法模式C++实现
工厂方法的应用场景:将实现方式和创建分离出来,工厂有多种生产线,将生产线抽离出来做为实现类。生产线为具体工厂所有。 工厂接口: #pragma once#include "MethodOperator.h"class IFactory{public: IFactory(void); virtual ~IFactory(void);原创 2018-02-06 09:38:16 · 131 阅读 · 0 评论 -
命令模式C++实现
命令模式场景如烧烤,客户下单,服务员收集命令,再下单给厨师。这种命令通过一方中转,再有实际操作者执行的模式。命令接收类: #pragma once#include "Receiver.h"class Command{public: Command(void); virtual ~Command(void); virtual void Action() = 0; virtua...原创 2018-02-09 14:19:20 · 1099 阅读 · 0 评论 -
状态模式C++实现
状态模式 的应用场景主要用于解耦多个if ..else层级状态的判断。不如说做计划,一定是某一时间做一件事情,下一时间做另外一件事情。状态模式实现状态跳转是通过内部设定下一状态实现。注意区分职责链模式。后续文章再总结区分相似模式的不同。 状态类: #pragma onceclass MyContext;class Status{public: St原创 2018-02-01 14:32:25 · 240 阅读 · 0 评论 -
组合模式C++实现
组合模式 组合模式主要用于树状结构。应用场景有XML结构、集团公司组织架构等。树状结构统一了整体和个体的行为接口。也就是说所有组织都有一样的行为函数,即方法透明。基类实现如下: MyComponent.h#pragma onceusing namespace std;#include string>class MyComponent{public原创 2018-01-25 11:48:39 · 202 阅读 · 0 评论 -
简议策略模式和简单工厂区别
策略模式和简单工厂区别2.1.1 相同点两者的模式结构非常相似,工厂类如下:策略类如下:2.1.2 区别“工厂模式着重与对象创建,策略模式着重与策略多变”这个解说并不能清楚的对二者进行区别。从结构数据传输看:工厂模式采用的内部封装模式创建一个基类对象,调用者(客户端)不知道工厂是怎么创建出的对象,比如说是直接创建,匿名创建,静态创建,单例创建,外部调用者原创 2018-01-24 14:32:24 · 153 阅读 · 0 评论 -
策略模式
1.2策略模式 策略模式主要用于行为多变性的应用场景。典型的是超市打折,今天打8折,明天又打7折,这种情况。通过策略模式封装后,每次打折只需通过外部添加一个策略类,并重新设置策略即可。策略类: #pragma onceclass MyStrategy{public: MyStrategy(void); virtual ~MyStra原创 2018-01-24 14:28:13 · 90 阅读 · 0 评论 -
职责链C++实现
职责链应用场景主要为将处理流程一级一级串行往后传递。常见的情况就是OA中流程处理。Handler类: #pragma onceclass Handler{public: Handler(void); virtual ~Handler(void);protected: Handler* m_nextHandler;public原创 2018-01-31 10:33:19 · 149 阅读 · 0 评论 -
装饰模式C++实现
装饰模式主要的应用场景是通过多个子类修改对象本身的属性。如游戏中人物换装备后,各属性的变化。对于增加新的装备的情况,采用装饰模式可以保持原有框架不变,只需增加对应装饰类即可。而对于变装,只需在客户端修改装饰操作即可。类图结构如下: 实现如下:MyComponent.h #pragma onceclass MyComponent{public:原创 2018-01-31 10:31:32 · 267 阅读 · 0 评论 -
桥接模式C++实现
桥接模式应该用场景在于一个接口,实现类有多个,动态绑定实现类。比如手表,表带作为借口,可有不同品牌、形状、颜色的表带。实现接口: #pragma onceclass IImplementor{public: IImplementor(void); virtual ~IImplementor(void); virtual void Ope原创 2018-02-06 09:56:43 · 223 阅读 · 0 评论 -
中介模式C++实现
中介模式适用于需求双发都不知道对方信息的交互情况。比方说房产中介,购房和买房方在交易前都不知道对方信息,只能通过中介进行沟通。参与者接口类实现: #pragma onceusing namespace std;#include string>class Mediator;class IColleague{public: IColleague(v原创 2018-02-06 10:04:52 · 264 阅读 · 0 评论 -
访问者C++实现
访问者用于数据结构稳定,访问者变化的情况。如游客访问景区,游客为变动的状态,各个景点是固定的数据结构。景点结构聚类Structure:Structure.h #pragma once#include "Element.h"using namespace std;#include <vector>class Structure{public: Structure(void); ...原创 2018-02-11 15:03:48 · 117 阅读 · 0 评论 -
迭代模式C++实现
迭代器用于遍历聚类,而不通过直接访问聚类方式获取聚类中的信息。聚类接口Aggregate.h: #pragma once#include "IIterator.h"class Aggregate{public: Aggregate(void); virtual ~Aggregate(void); virtual IIterator* CreateIterator(void) = ...原创 2018-02-11 15:01:45 · 2442 阅读 · 0 评论 -
建造者模式C++实现
建造者模式用于实现复杂的构建过程。由方法论+ 具体实施者产生最终产品。 比如导演导演电影,导演电影有一套方法论。然后由各不同的演员演绎,各演员能演绎出不同的风格,最终产出一部电影。导演类: #include "StdAfx.h"#include "Director.h"Director::Director(void){}Director::~Director(void){}void Direct...原创 2018-02-11 14:59:51 · 119 阅读 · 0 评论 -
享元模式C++实现
享元模式主要用于节约内存开销。可看成工厂+单例模式的结合。享元类: #pragma onceclass Share{public: Share(void); virtual ~Share(void); virtual void Operation(void) = 0;}; 具体共享类: #include "StdAfx.h"#include "ConcreteShare...原创 2018-02-11 14:57:48 · 310 阅读 · 0 评论 -
原型模式C++实现
原型模式就是对本身进行克隆。克隆完成后,各自独立,互不影响。 原型类: #include "StdAfx.h"#include "Prototype.h"Prototype::Prototype(void) : m_age(0){}Prototype::~Prototype(void){}Prototype* Prototype::C...原创 2018-02-11 14:54:42 · 112 阅读 · 0 评论