![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
aimsgmiss
开开心心,每天进步一点点~~!
展开
-
备忘录模式
备忘录模式:在不破坏封装前提条件下,捕获一个对象的内部状态,在对象之外,保存状态,以便在适当的时候恢复对象,应用实例:1、玩游戏时的存档2、Command + zexample:Originator 发起请求将需要保存的信息保存到Memento(备忘录)中,然后将对象提交到Caretaker实例保管类图:...原创 2020-06-09 16:49:33 · 130 阅读 · 0 评论 -
建造者模式(Builder)
建造者模式:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。构建过程分为:客户-指导-生成器 Client - Director - Builder:类图:时序图:具体实现:#import <iostream>#import <string>//最终被建造产品class IHouse{public: virtual ~IHouse(){}protected: int _foundationCount...原创 2020-06-09 16:43:40 · 140 阅读 · 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 · 127 阅读 · 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 · 87 阅读 · 0 评论 -
单列模式
单列模式要求类的实例,在整个应用的生命周期只会实例化一次无论任何时候,返回的都是同一个实例#import <Foundation/Foundation.h>#import <pthread.h>//这种写法出现在多线程中就会出现实例化多个singleInstanceclass SingletonDemo1{private: static SingletonDemo1* singleInstance;public: static Singleto..原创 2020-05-28 17:47:10 · 98 阅读 · 0 评论 -
责任链模式
责任链模式:是多个对象都有机会处理请求,从而避免请求的发送者和接受者之间发生耦合,此模式形成一条链,并延着这条链的传递请求,直到有一个对象能够处理它为止责任链主要思想是,对象引用了同一类型的另一个对象,形成一条链。链中的每个对象实现了同样的方法,处理链中第一个对象发起一个请求,如果对象不知道如何处理请求,就把他传递下一个响应者。UIView响应者链就是一个完美的责任链模式具体应用:#import <Foundation/Foundation.h>#import <.原创 2020-05-28 17:07:33 · 108 阅读 · 0 评论 -
组合模式
组合模式把相同基类型的对象组合到树状结构中,父节点包含同类型的子节点形成"部分-整体"的层次结构部分-整体:既包含对象的组合又包含作为叶子节点的单个对象的一种层次机构每个组合体包含其它节点,可以使叶子节点或者其它组合体,这种关系在层次结构中递归重复,每个组合或者叶子节点具有相同的基类,同样的操作可以应用他们中的每一个,不必再客户端做类型检查。Objective-C中使用UIView实现组合模式,UIView的实例可以包含其它实例形成统一的树形结构,让客户端对单个UIView对象和UIView原创 2020-05-28 15:17:21 · 159 阅读 · 0 评论 -
代理模式
代理模式类图: NSProxy继承NSObject协议 作为抽象基类和NSObject同级别的基类 发送给NSProxy子类(代理)的消息会被转发给真正的实体对象,或者让代理加载 真正的实体对象,或把代理自身变成实体对象,让开销比较大的对象实行 懒实例化(邮件Mail应用)收到邮件消息中只会显示一些基本信息,当用户点击站位图形 时,开始加载真正的图形内容,原先的站位图标作为一个代理 Clie...原创 2020-05-27 19:35:58 · 152 阅读 · 0 评论 -
适配器模式
适配器模式:将原来不能够在一起工作的类变得能在一起工作类适配器:通过实现接口和继承实现对象适配器:通过实现和组合实现1、iPhone 6 充电电压5V,插座电压220V 手机通过电源适配器直接能够用上目标电压5V,220V电压作为适配者(Adaptee)。2、Objective-C 中协议充当Target需要被实现,UIViewController充当适配者,如何让协议和UIViewController进行通信,这时候需要自定义视图控制作为适配器让协议和UIViewControll.原创 2020-05-27 15:10:17 · 119 阅读 · 0 评论 -
中介模式
1、中介模式产生背景当系统变得越来越复杂之后,模块与模块的之间依赖性非常强大,后期维护背景加大。2、引入中介模式之后变得简洁了:模块与模块之间不直接引用,单方面直接通过中介者交互,中介甚至不需要依赖任何模块,模块也不需要知道其他模块的存在,这样由系统的网状结构变得更加简洁,大大减低了后期系统的维护,如图所示:...原创 2020-05-26 15:15:55 · 456 阅读 · 0 评论 -
命令模式(C++版本和Objective-C)
#import <Foundation/Foundation.h>#import <iostream>#import "NSInvocationTest.h"// receiverclass AirConditioning{public: void turnOn(){ NSLog(@"AirConditioning turnOn"); } void turnOff(){ NSLog(@"AirCondit..原创 2020-05-26 15:06:47 · 139 阅读 · 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 · 99 阅读 · 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 · 140 阅读 · 0 评论