
IOS设计模式
文章平均质量分 89
arbboter
也曾梦想上天,还是默默无闻,而今迈步从头越
展开
-
建造者模式(Builder)
定义 (本人在阅读完本书的中英两个版本之后发现对建造者模式十窍懂了九窍,所以直接去网上搜别人的分析了,所以本章大部分是根据网上的资料收集来的,此外,代码例子表示本书的例子不合适,也换了,所以本章和这本书关系不大。) 建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式最重要的两个角色:抽象建造者(Builder)和指导者(Director),其中建原创 2015-01-14 17:42:22 · 2843 阅读 · 0 评论 -
装饰器模式(Decorator Pattern)
定义 先给出比较正式的定义哈。 装饰器一般的理解就是为了实现增强版的对象,而在面向对象的编程中,一般增强一个对象的方法就是: 修改对象的类结构继承,构造一个继承于目标对象的类,然后再子类里面再把增强的功能加上 显然,上面两种方法都是可以实现增强对象的功能的,但是根据面向对象编程的原则,修改显然是不可取得,至于继承,虽然也可以,但是一般基于增强功能的需求我们一般的做法是尽量使原创 2015-04-15 20:33:48 · 1326 阅读 · 0 评论 -
迭代器模式(Iterator Pattern)
说到迭代器,我们应该是很熟悉的,不管你是写过C++代码还是写过IOS代码,你都应该有用过迭代器,比如C++的vector、list等STL对象都提供了迭代器以供程序代码可以更为方便地遍历集合元素。 迭代器为访问集合对象提供一种间接的方法,从而使得外部不需要知道集合的内部细节。集合对象的迭代器避免了集合对象本身实现的元素的遍历,使得集合的遍历更为简单、便利。迭代器一般定义了通用的访问集合元素的方法,同时提供了记录了当前元素的机制,使得可直接使用迭代器而不需要使用集合对象本身就可以访问集合。集合和迭代器的基本关原创 2015-01-26 19:51:24 · 3827 阅读 · 0 评论 -
单例模式(Singletond)
定义 单例模式是为了使得整个程序的单例类只有一个对象,整个程序共同使用一个该类型的对象。单例模式确保某一个类只有一个实例,这个类称为单例类。其定义如下: 单例模式其实很容易理解的,我只要一个对象,至始至终都是这一个对象。对于C++实现单例模式是比较简单的,把构造函数(包括拷贝构造函数)、析构函数的访问权限设置为private,然后提供获取单例对象的接口即可(一般不提供销毁对象的接口,防止不原创 2015-01-16 11:24:27 · 2870 阅读 · 0 评论 -
设计模式阶段性总结之对象创建
之前的几篇文章所介绍的设计模式都是关于如何创建对象的,涉及到的设计模式如下所示: 原型模式(Prototype) :拷贝复制一个对象工厂方法模式(Factory Method) :创建一个对象抽象工厂模式(Abstract Factory):创建个或多个对象建造者模式(Builder):分步创建一个对象单例模式(Singletond):创建一个唯一的对象 在IOS的开发过程中,原原创 2015-01-17 11:07:40 · 2436 阅读 · 0 评论 -
适配器模式(Adapter)
定义 有一天,你要用到一个功能,而恰好你已经有一个实现了该功能的类,但是该类的接口和你所需要使用的接口不谦容,怎么做? 把原来的类拿过来修改还是怎么的? 修改的话,要改变原有的接口,也许修改起来比较难,也许你已经忘了该类是怎么实现的,也许以后的某一天你又要在其他程序里面使用该类,而那个时候要使用的接口又是另外的一种方式。所以,直接修改的话,未免太傻太天真,而且难免会修改得千真万确。在编程经验原创 2015-01-17 16:38:17 · 2464 阅读 · 0 评论 -
组合模式(Composite Pattern)
定义 组合模式将具有相同的基本类型的对象组合成树形结构的对象,该树的父节点和子节点具有相同的类型,相同的接口。换句话说,将对象组合成树形结构以表示“部分-整体”的层次结构,Composite使得用户对单个对象和组合对象的使用具有一致性。 由于父节点和子节点具有相同的基本类型,所以在整个树上不需要做任何类型检查,客户端就可以在父节点和子节点上进行相同的操作,而不需要区分它所需要操作的对象是父节点还是子节点。使用组合对象的客户端可以忽略树的父节点和字节点得差异,使得用起来非常顺手、简单,下面是一个运行时的组合对原创 2015-01-23 19:11:26 · 3047 阅读 · 0 评论 -
原型模式(Prototype)
定义 原型模式有点像复制,不过该复制可以做一些修改,即从原对象复制出一个一模一样的对象后,然后可以选择性地修改复制后的对象,以此创建出一个需要的新对象。这里需要注意的是此处的复制指深拷贝,比较权威的定义如下所示 THE PROTOTYPE PATTERN: Specify the kinds of objects to create using a prototypical insta原创 2015-01-12 15:15:05 · 2611 阅读 · 0 评论 -
抽象工厂(Abstract Factory)
定义 在软件设计中,如果客户想手动创建一个对象,需要知道对象的详细结构,包括其数据结构以及方法调用,如果运气不好,还可能因为该对象引用了其他对象,导致客户端还得了解其他对象,如此..使得该对象的创建变得复杂起来。之前讲过的工厂方法模式可以解决该类问题,不过工厂方法模式一般用来解决单个对象的创建,对于需要创建多个有关联的对象,那么可能就需要使用抽象工厂模式的方法了。此时,客户端只需要知道抽象出来的原创 2015-01-14 10:25:10 · 2339 阅读 · 0 评论 -
访问者模式(Visitor Pattern)
什么是访问者呢?就拿身边的一个例子来看看吧。你有一栋房子,房子里面有很多管道、电路之类的东西,很显然,这些东西你不懂,是别人帮你弄好的。有一天,你家的管道出问题了,于是你需要解决这个问题,但是你不懂,所以你需要找专业人员(管道修理工)来维护,这个你找的人对于你的房子来说他就是访问者了。访问者设计模式主要包含两个角色:访问者和被访问的对象。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中,使得增加新的操作变得很容易。如果你熟悉MVC模型,那么可以发现,在MVC中,M是被访问者,C是访原创 2015-01-27 21:42:48 · 4030 阅读 · 0 评论 -
中介者模式(Mediator Pattern)
定义 一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互。原创 2015-01-20 21:41:48 · 2961 阅读 · 0 评论 -
桥接模式(Bridge pattern)
定义 桥接模式的目的是使得程序的抽象部分和实现部分相分离,使得相互间独立而不再相互依赖,使得抽象部分和实现部分的修改不至于引起对方的修改。 抽象部分抽象出供客户端直接使用的接口,而实现部分定义了抽象部分需要使用的接口,当抽象部分的实例引用了实现部分的接口的时候,我们所谓的桥接也就形成了。桥接是通过实现部分的引用,把抽象接口和实现部分的接口桥接起来,这就是桥接的来源。其原理图如下所示:原创 2015-01-18 21:35:55 · 2867 阅读 · 0 评论 -
外观模式(Facade Patter)
定义 外管设计模式是为了给子系统的一系列不同的接口提供统一的接口的方案。外观模式通过定义更高层次的接口使得子系统更容易使用,隐藏了子系统的交互细节和相互间的依赖。 简而言之,通过外观设计模式,使得原本难用复杂的一个系统变得简单易用,而这种方式就是外观模式定义了更高一层的统一接口,隐藏了原来系统调用接口以及相互间的依赖性。拿LInux的PC开机做例子,我们要说的开机不是简单的按电源键开机。其实Linux开机的具体流程大致是这样的:原创 2015-01-19 20:20:27 · 2561 阅读 · 0 评论 -
观察者模式(Observer Pattern)
观察者设计模式也叫做发布-订阅(Publish-Subscribe)模式。有点像杂志订阅的意思,你向杂志社订阅杂志,然后提供了自己的姓名和邮箱地址,这样杂志社就可以把你所订阅的杂志推送到你的邮箱了,而你收到的杂志都是你自己订阅的,不会不是你订阅的,这就是一个观察者模式的例子。订阅杂志的过程简单来说就是一个观察者(订阅者)向某个杂志社(发布者)订阅特定的杂志,其静态关系图如下所示原创 2015-01-23 08:54:45 · 3120 阅读 · 0 评论 -
工厂方法(Factory Method)
定义 工厂方法也叫虚构造器(virtual constructor),适用于在代码运行时,当不能确定对象所创建的类型而需要其子类确定的时候。在面向对象编程的环境中,其大致情况就相当于利用多态的特性,调用基类接口创建对象,而子类又各自实现了自己的创建接口的方法,类图结构如下: 如果撇开工厂方法模式的话,那么当需要创建对象的时候,直接在需要的地方使用具体的产品类创建对象即可,但是这样的话代原创 2015-01-13 14:11:29 · 2702 阅读 · 0 评论 -
职责链模式(Chain of Responsibility)
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。原创 2015-04-16 18:50:23 · 1267 阅读 · 0 评论