来自<Objective-C编程之道iOS设计模式解析>一书的摘要总结 一.Prototype 原型模式 定义:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象.(<设计模式>1994) 一般在初始化信息不发生变化的情况下,克隆是最好的办法.这既可以隐藏对象创建的细节,又对性能是大大的提升. 适用情景: 需要创建的对象应独立于其类型与创建方式. 要实例化的类是运行时决定的. 不想要与产品层次相对应的工厂层次. 不同类的实例间的差异仅是状态的若干组合.因此复制相应数量的…
适配器模式:将一个类的借口转换成客户端希望的另一个接口 有一个很直观的图: 例如      :电源适配器(将110V电压转换成220V电压,其中Traget是220V电压,adaptee就是110V电压,Adapter就是适配器): 代码实现: #import "Adapter.h" @implementation Adapter -(int)changeTo220:(int)adaptee{ ; } @end Adapter #import "ViewController.…
本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 适配器(Adapter)模式 适配器可以让一些接口不兼容的类一起工作.它包装一个对象然后暴漏一个标准的交互接口. 如果你熟悉适配器设计模式,苹果通过一个稍微不同的方式来实现它-苹果使用了协议的方式来实现.你可能已经熟悉UITableViewDelegat…
外观设计模式: 这个外观设计模式提供了一个单独的接口给复杂的子系统.而不是暴露用户的一组类和API,你仅仅暴露一个简单的同一的API. 下面的图片解释这个概念: API的用户根本不知道后面系统的复杂性.这种模式是理想的在处理大量的类,特别是当他们复杂的使用或者很难理解的时候. 这个外观设计模式使用系统的接口和你隐藏的实现来分离代码.他也减少了依赖外部代码的子系统运作.这也是有用的如果在外观设计模式的类可能会改变,外部类可以保留相同的API同时改变幕后的事情. 例如有一天你可能想替换你的服务器端,…
引言 在项目开发中,有时候会遇到这样的一种情景:需要使用以前开发的“一些现存的对象”,但是新环境中要求的接口是这些现存对象所不满足的.怎样应对这种迁移的需求?使得可以复用这些对象,以满足新的应用环境,这就是适配器(Adapter)所要解决的问题. 定义 “将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.” 最初的定义出现于<设计模式>(Addison-Wesley,1994). 这个定义应该很好理解,生活中也到处充满着适配器模式的…
1.你好,设计模式 2.案例分析:设计一个应用程序 3.原型 4.工厂方法 5.抽象工厂 6.生成器 7.单例 8.适配器 9.桥接 10.外观 11.中介者 12.观察者 13.组合 14.迭代器 15.访问者 16.装饰 17.责任链 18.模版方法 19.策略 20.命令 21.享元 22.代理 23.备忘录…
代理模式:为其他对象创建一个代理以控制对这个对象的访问 UML解释:客户端向Proxy发起一个Request()请求,Proxy对象会把这个Request转发给Proxy对象的RealSubject.RealSubject会实施操作间接满足Subject要求.举一个生活中的例子就比较好理解了——去饭店点餐,我们就是UML中的Subject(客户端).Proxy就是饭店的服务员.RealSubject就是厨师.我们不能直接向厨师点餐,我们把点餐(Request())请求发送给服务员(Proxy).…
责任链模式:使多个对象都有机会处理请求,从而避免发送者和接受者之间发生耦合. 应用场景: 有多个对象可以处理请求,而处理程序只有在运行时才能确定 例如: 英雄联盟中伤害计算,伤害类型分为AP.AD.真实伤害(无视任何防御直接造伤害). 结构分析:整个结构就在这个攻击处理器的抽象.抽象一个属性,下一个处理器(newxHandler).抽象一个方法,处理攻击(handleAttack) -(void)handleAttack:(attack *)attack{ [nextHandler handle…
组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构.组合是的用户对单个对象和组合对象的使用具有一致 Cocoa Touch中组合模式使用:Cocoa Touch框架中,UIView被组织成一个组合结构.每个UIView的实例可以包含UIView的其他实例,形成同一结构. 视图组合结构参与绘图时间处理,当请求超视图为显示进行渲染时,消息会先在超视图被处理,然后传递给子视图.消息回传到整个树. 例如绘制View5,绘制时间由View传递给View1.View2,然后发现不不能处理…
抽象工厂方法:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 与工厂方法区别: 抽象工厂通过对象组合创建抽象产品.工厂通过类集成创建抽象产品 抽象工厂创建多系列产品.工厂创建一种产品(例如上篇都属于鞋) 抽象工厂修改父类的接口才能支持新产品.工厂子类化并重写工厂方法创建新产品 例如      :Button类有两个子类ButtonA.ButtonB,我们通过对Button提供一个抽象工厂方法来产生不同的button子类: 代码实现: #import "button.h&quo…