设计模式
aimsgmiss
开开心心,每天进步一点点~~!
展开
-
备忘录模式
备忘录模式:在不破坏封装前提条件下,捕获一个对象的内部状态,在对象之外,保存状态,以便在适当的时候恢复对象, 应用实例: 1、玩游戏时的存档 2、Command + z example: Originator 发起请求将需要保存的信息保存到Memento(备忘录)中,然后将对象提交到Caretaker实例保管 类图: ...原创 2020-06-09 16:49:33 · 125 阅读 · 0 评论 -
建造者模式(Builder)
建造者模式:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。 构建过程分为:客户-指导-生成器 Client - Director - Builder: 类图: 时序图: 具体实现: #import <iostream> #import <string> //最终被建造产品 class IHouse{ public: virtual ~IHouse(){} protected: int _foundationCount...原创 2020-06-09 16:43:40 · 135 阅读 · 0 评论 -
原型模式(Prototype)
原型模式:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象 Objective-C 实现原型模式应用场景: Cocoa Touch框架为Object的派生类提供了实现深复制的协议 NSObject的子类需要实现NSCopying协议及方法 - (id)copyWithZone:(nullable NSZone *)zone 否则发送copy消息引发异常。 简单理解原型模式就是对象的复制。 #import <iostream> #import <str...原创 2020-06-08 18:43:08 · 120 阅读 · 0 评论 -
策略模式
策略模式:把相关算法分离为不同的类,称为策略,这些算法可以相互替换,本模式使得算法可独立于使用它的客户而变化 #import <string> #import <iostream> using namespace std; class IStrategy{ public: ~IStrategy(){} public: virtual bool doMethod(std::string str) const = 0; }; class ByCarStrategy:p原创 2020-06-08 17:58:30 · 84 阅读 · 0 评论 -
单列模式
单列模式要求类的实例,在整个应用的生命周期只会实例化一次 无论任何时候,返回的都是同一个实例 #import <Foundation/Foundation.h> #import <pthread.h> //这种写法出现在多线程中就会出现实例化多个singleInstance class SingletonDemo1{ private: static SingletonDemo1* singleInstance; public: static Singleto..原创 2020-05-28 17:47:10 · 92 阅读 · 0 评论 -
责任链模式
责任链模式:是多个对象都有机会处理请求,从而避免请求的发送者和接受者 之间发生耦合,此模式形成一条链,并延着这条链的传递请求,直到有一个对象能够处理它为止 责任链主要思想是,对象引用了同一类型的另一个对象,形成一条链。链中的每个对象实现了同样的 方法,处理链中第一个对象发起一个请求,如果对象不知道如何处理请求,就把他传递下一个响应 者。 UIView响应者链就是一个完美的责任链模式具体应用: #import <Foundation/Foundation.h> #import <.原创 2020-05-28 17:07:33 · 104 阅读 · 0 评论 -
组合模式
组合模式把相同基类型的对象组合到树状结构中,父节点包含同类型的子节点 形成"部分-整体"的层次结构 部分-整体:既包含对象的组合又包含作为叶子节点的单个对象的一种层次机构 每个组合体包含其它节点,可以使叶子节点或者其它组合体,这种关系在 层次结构中递归重复,每个组合或者叶子节点具有相同的基类,同样的 操作可以应用他们中的每一个,不必再客户端做类型检查。 Objective-C中使用UIView实现组合模式,UIView的实例可以包含其它实例 形成统一的树形结构,让客户端对单个UIView对象和UIView原创 2020-05-28 15:17:21 · 156 阅读 · 0 评论 -
代理模式
代理模式类图: NSProxy继承NSObject协议 作为抽象基类和NSObject同级别的基类 发送给NSProxy子类(代理)的消息会被转发给真正的实体对象,或者让代理加载 真正的实体对象,或把代理自身变成实体对象,让开销比较大的对象实行 懒实例化(邮件Mail应用)收到邮件消息中只会显示一些基本信息,当用户点击站位图形 时,开始加载真正的图形内容,原先的站位图标作为一个代理 Clie...原创 2020-05-27 19:35:58 · 145 阅读 · 0 评论 -
适配器模式
适配器模式:将原来不能够在一起工作的类变得能在一起工作 类适配器:通过实现接口和继承实现 对象适配器:通过实现和组合实现 1、iPhone 6 充电电压5V,插座电压220V 手机通过电源适配器直接能够用上 目标电压5V,220V电压作为适配者(Adaptee)。 2、Objective-C 中协议充当Target需要被实现,UIViewController充当适配者, 如何让协议和UIViewController进行通信,这时候需要自定义视图控制作为适配器 让协议和UIViewControll.原创 2020-05-27 15:10:17 · 116 阅读 · 0 评论 -
中介模式
1、中介模式产生背景当系统变得越来越复杂之后,模块与模块的之间依赖性非常强大,后期维护背景加大。 2、引入中介模式之后变得简洁了:模块与模块之间不直接引用,单方面直接通过中介者交互,中介甚至不需要依赖任何模块,模块也不需要知道其他模块的存在,这样由系统的网状结构变得更加简洁,大大减低了后期系统的维护,如图所示: ...原创 2020-05-26 15:15:55 · 443 阅读 · 0 评论 -
命令模式(C++版本和Objective-C)
#import <Foundation/Foundation.h> #import <iostream> #import "NSInvocationTest.h" // receiver class AirConditioning{ public: void turnOn(){ NSLog(@"AirConditioning turnOn"); } void turnOff(){ NSLog(@"AirCondit..原创 2020-05-26 15:06:47 · 131 阅读 · 0 评论 -
装饰模式笔记(网络改编而成)
#import <Foundation/Foundation.h> #include <string> #include <iostream> using namespace::std; class Hamburger{ public: Hamburger(){ } ~Hamburger(){ } public: virtual float get_privice(){ return 0.0f; } ..原创 2020-05-25 18:38:47 · 96 阅读 · 0 评论 -
访问者模式(根据改编而成)
#import <Foundation/Foundation.h> #import <string> #include <list> using namespace std; class Engine; class Manager; class Visitor{ public: virtual void visitor(Engine* engine) = 0; virtual void visitor(Manager* manager) = 0; ..原创 2020-05-25 13:48:24 · 138 阅读 · 0 评论