## 23种设计模式iOS实现
### 策略模式(Strategy)
它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。通过一个Context指定一个Strategy,通过Strategy的子类实现不同的算法。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F.png)</br>
````objc
//策略模式配合简单工厂模式,同样的最初价格,返回不同的最终价格。不同的type就是不同的策略。
HCDCashContext *context = [[HCDCashContext alloc]initWithCashType:CashTypeNormal];
NSLog(@"结果是%f",[context getResult:100]);
HCDCashContext *contextReturn = [[HCDCashContext alloc]initWithCashType:CashTypeReturn];
NSLog(@"结果是%f",[contextReturn getResult:100]);
HCDCashContext *contextRobate = [[HCDCashContext alloc]initWithCashType:CashTypeRobate];
NSLog(@"结果是%f",[contextRobate getResult:100]);
````
### 装饰模式(Decorator)
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。decorate应该像礼物一样层层封装,每一层都添加新的功能。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E8%A3%85%E9%A5%B0%E6%A8%A1%E5%BC%8F.jpg)</br>
````objc
//原始对象
ConcreteComponent *component = [[ConcreteComponent alloc]init];
//装饰对象
ConcreteDecoratorA *decoratorA = [[ConcreteDecoratorA alloc]init];
ConcreteDecoratorB *decoratorB = [[ConcreteDecoratorB alloc]init];
//装饰对象指定原始对象,后面就是用装饰对象。这样既有原始对象的功能,也有装饰对象的功能。
decoratorA.component = component;
decoratorB.component = component;
[decoratorA operation];
[decoratorB operation];
比如iOS的扩展和分类就是装饰模式。
比如SDWebImage的UIView、UIImageView、UIButton的各种分类,他们都把component的部分在UIView分类中,decorator部分放在UIButton、UIImageView中。
````
### 代理模式(Proxy)
为其他对象提供一种代理以控制对这个对象的访问。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F.png)</br>
````objc
UITableView的delegate和dataSource熟悉,都是通过代理对象来控制对UITableView的访问。
````
### 工厂方法模式(Factory Method)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。相对于简单工厂方法,工厂方法模式把工厂也抽象出来,进行接口、实现分离。这样具体工厂和具体产品可以对应着同时扩充,而不需要修改现有逻辑。当然,使用者也许在不同场景要在一定程度上自己对应的工厂选择。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.png)</br>
````objc
//不同的操作类有不同的工厂类,扩展新的操作不影响现有操作。HCDfactoryAdd工厂类初始化HCDCalculateAdd类。其他减、乘、除一样。
HCDfactory *factory = [[HCDfactoryAdd alloc]init];
HCDfactory *calculate = [factory createFactory];
calculate.numberA = 10;
calculate.numberB = 15;
NSLog(@"结果是%f",[calculate calculate]);
又比如NSNumber调用的具体工厂NSCFBoolean和NSCFNumber也是具体的工厂类。
````
### 原型模式(Prototype)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E5%8E%9F%E5%9E%8B%E6%A8%A1%E5%BC%8F.png)</br>
````objc
//NSObject类对象作为原型
NSObject *obj = [NSObject new]
//obj对象作为原型
NSObject *objCopy = [obj copy]
NSObject *objCopy1 = [obj copy]
原型模式是非常简单的一种设计模式, 在多数情况下可被理解为一种深复制的行为。在Objective-C中使用原型模式, 首先要遵循NSCoping协议(OC中一些内置类遵循该协议, 例如NSArray, NSMutableArray等)。还有KVO的实现原理也是原型模式
````
### 模板方法模式(Template Method)
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.png)</br>
````objc
//HCDtextpaper定义了两个问答题的不变部分(题目),子类定义了变化部分(答案)。
HCDtextPaper *paperA = [[HCDtextPaperA alloc]init];
[paperA testQuestion1];
[paperA testQuestion2];
HCDtextPaper *paperB = [[HCDtextPaperB alloc]init];
[paperB testQuestion1];
[paperB testQuestion2];
当我们要完成在某个细节层次一致的一个过程或者一系列步骤,但是其个别步骤的更详细的层次上实现可能不同时,我们通常考虑用模板方法模式来处理。
````
### 外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E5%A4%96%E8%A7%82%E6%A8%A1%E5%BC%8F.png)</br>
````objc
基金经理帮我们管理不同的股票。基金经理作为外观,我们只需要让基金经理买或者卖就好,基金经理再帮我们处理不同股票的卖或者买。
项目中有不同的网络请求,对于每一种类型的网络请求都封装到一个固定的文件里处理,比如公用参数添加,返回数据的处理。然后再通过一个外观文件引入,直接就可以使用了。从使用来说,所有网络请求的差异都被外观文件处理了。
还有比如AFN对于NSURLSession的不同系统版本的处理。
````
### 建造者模式(Builder)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F.png)</br>
````objc
HCDPersonBuilderDirector *director = [[HCDPersonBuilderDirector alloc]init];
HCDPresionBuilder builder = [[HCDPersonFatBuilder alloc]init];
//为director指定builder
director.builder = builder;
//director发出构建的指令,builder负责具体的建造过程
[director buildPerson];
SDWebImage的SDWebImageDownloader和SDWebImageDownloaderOperation就是director和builder之间的关系。前者不负责具体的下载操作,只负责管理builder,builder负责图片的具体下载。
````
### 观察者模式(Observer)
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F.png)</br>
````objc
iOS中的KVO、NSNotication都是观察者模式。
````
### 抽象工厂模式(Abstract Factory)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。</br>
![img](https://github.com/huang303513/Design-Pattern-For-iOS/blob/master/%E8%AE%BE%E8%AE%A1%E5%9B%BE/%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F.png)</br>
````objc
//根�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
读书笔记:IOS设计模式探索(大话设计模式).zip (714个子文件)
config 269B
.DS_Store 8KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
FETCH_HEAD 132B
.gitignore 11B
Mark.h 662B
HCDCalculate.h 572B
HCDPhone.h 539B
HCDMediatorProtocal.h 532B
HCDCashContext.h 502B
HCDPresionBuilder.h 497B
HCDGameRoll.h 477B
HCDSubject.h 469B
HCDObjectStructure.h 469B
HCDCustomr.h 438B
HCDVisitors.h 427B
HCDMnager.h 418B
Colleague.h 407B
Mediator.h 406B
HCDWork.h 399B
HCDOrder.h 395B
HCDWebSiteFactory.h 388B
HCDWaiter.h 378B
HCDForeignCenter.h 360B
CommonTool.h 360B
HCDStateManager.h 359B
HCDGameState.h 354B
HCDFinanceDepartment.h 354B
HCDSoftware.h 354B
HCDWorker.h 352B
HCDConcreteCompany.h 351B
HCDContext.h 350B
HCDPersonBuilderDirector.h 349B
HCDCalculate.h 349B
HCDHRDepartment.h 343B
HCDCalcuteFactory.h 339B
HCDproxy.h 337B
ConcreteDecoratorA.h 334B
HCDPlayer.h 333B
HCDDepartment.h 332B
HCDpursuit.h 332B
HCDgiveGift.h 326B
HCDFactory.h 324B
HCDCompany.h 324B
HCDCashBase.h 317B
HCDCaseReturn.h 312B
HCDCashRobate.h 312B
HCDtextPaper.h 311B
HCDReuquest.h 308B
HCDConcreteWebSite.h 306B
HCDAbstractExpression.h 301B
HCDEventState.h 298B
HCDTranslator.h 296B
Decorator.h 294B
AppDelegate.h 290B
AppDelegate.h 290B
AppDelegate.h 288B
AppDelegate.h 288B
AppDelegate.h 288B
AppDelegate.h 288B
AppDelegate.h 287B
HCDfactory.h 287B
AppDelegate.h 286B
AppDelegate.h 286B
AppDelegate.h 285B
AppDelegate.h 284B
HCDUser.h 284B
AppDelegate.h 284B
AppDelegate.h 284B
AppDelegate.h 284B
AppDelegate.h 283B
AppDelegate.h 283B
HCDPersonThinBuilder.h 282B
AppDelegate.h 281B
HCDSqlserverDepartment.h 281B
AppDelegate.h 281B
AppDelegate.h 281B
AppDelegate.h 281B
AppDelegate.h 281B
HCDPersonFatBuilder.h 280B
AppDelegate.h 280B
AppDelegate.h 280B
AppDelegate.h 280B
HCDElements.h 278B
HCDAccessDepartment.h 275B
HCDCalcuteMultiply.h 274B
HCDCalculateDivide.h 274B
HCDCalcuteMultiply.h 274B
HCDCalculateDivide.h 274B
HCDCalculateMinus.h 272B
HCDCalculateMinus.h 272B
HCDAccessUser.h 271B
Verter.h 271B
HCDCalculateAdd.h 269B
HCDCalculateAdd.h 268B
HCDSqlserverFactory.h 264B
HCDPlaySoftWare.h 264B
HCDWorkSoftWare.h 264B
共 714 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
九转成圣
- 粉丝: 4888
- 资源: 2961
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功