设计模式
文章平均质量分 83
凯奥斯
可能是最不会写注释的程序员。
展开
-
小话设计模式(一)单例模式
单例模式(Singleton)是一种喜闻乐见非常常用的设计模式。老师说,架构师(或者主程)也说“要面向对象,不能使用全局变量”,那么当我们真的真的很需要使用类似于全局变量的东西的时候该怎么办?单例模式为我们提供了一种解决方案。原创 2016-09-20 21:56:06 · 1426 阅读 · 0 评论 -
小话设计模式(十四)命令模式
命令(Command)模式,又称为动作(Action)或者事务(Transaction)模式,它将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化,然后对请求排入序列,或者记录请求日志,以及支持可撤销的操作。原创 2016-10-02 22:41:29 · 1391 阅读 · 0 评论 -
小话设计模式(十五)迭代器模式
迭代器(Iterator)模式,又称游标(Cursor)模式,它提供了一种方法,可以顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。虽然C#已经在内部实现了迭代器模式,我们可以使用foreach in很方便的遍历容器中的元素。但是,这样并不该影响我们对Iterator的学习。本文就实现游戏里的仓库的迭代器作为示例。原创 2016-10-03 10:03:55 · 1411 阅读 · 0 评论 -
小话设计模式(十六)中介者模式
中介者(Mediator)模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。以下情况适合使用中介者模式:1、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。2、一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。3、想定制一个分布在多个类中的行为,而又不想生成太多的子类。原创 2016-10-03 13:20:36 · 1455 阅读 · 0 评论 -
小话设计模式(十八)备忘录模式
备忘录(Memento)模式,又称为令牌(Token)模式,它可以在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复至原来的状态。一般在以下情况下使用备忘录模式:必须保存一个对象在某一时刻的(部分)状态,以保证需要时将它恢复。而如果用一个接口来让其他对象直接获得这些状态,会暴露对象的细节并破坏其封装性。备忘录模式经常会用在文本、图像编辑工具里,用以支持Undo、Redo操作。原创 2016-10-04 09:40:29 · 2040 阅读 · 0 评论 -
小话设计模式(十九)解释器模式
解释器(Interpreter)给定一个语言,定义它的文法的一种表示,并且定义一个解释器,这个解释器使用该表示来解释语言中的句子。很多脚本语言例如Lua、Ruby、Python都是解释器的一种应用。原创 2016-10-04 19:39:38 · 1211 阅读 · 0 评论 -
小话设计模式(二十)状态模式
状态(State)模式,又名状态对象(Objects for States)模式,它允许一个对象在内部状态改变时改变它的行为。对象看起来似乎改变了它的类。状态模式的应用场景:1、一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变自己的行为。2、一个操作中含有庞大的多分支的条件语句,而这些分支条件依赖于对象的状态。原创 2016-10-05 08:36:01 · 1103 阅读 · 0 评论 -
小话设计模式(二十一)策略模式
策略(Strategy)模式,又称政策(Policy)模式。它定义了一系列算法,将它们一个个封装起来,并且使它们可以相互替换,使得算法可以独立于使用它的用户而变化。策略模式适用于以下情况:1、许多相关的类只是行为不同。2、需要使用一个算法的不同变体。3、一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。原创 2016-10-05 10:43:51 · 1055 阅读 · 0 评论 -
小话设计模式(二十二)模板方法模式
模板方法(Template Method)模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中去。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。模板方法适用于以下情况:1、 一次性实现一个算法的固定部分,并将可变行为留给子类实现。2、 各个子类中公共的行为应该被提取出来并集中到一个公共的父类中用以避免代码重复。3、 控制子类扩展,父类提供了缺省的方法,子类可以在必要时进行扩展。原创 2016-10-05 23:16:43 · 803 阅读 · 0 评论 -
小话设计模式(二十三)访问者模式
访问者(Visitor)模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者的适用情况:1、 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。2、 需要对一个对象结构中的对象进行很多不同的并且不想关的操作,而你想避免让这些操作“污染”这些对象的类。3、 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。原创 2016-10-05 23:27:26 · 623 阅读 · 0 评论 -
小话设计模式(番外一)插件模式
插件(Plugin)模式向用户提供了一种扩展程序的接口,用户可以在程序本体之外,按照指定接口编写插件来为程序增加功能。可能实际开发中不太会运用到插件模式,但是它确实我们经常会使用到的一种模式。例如CocosBuilder和Unity3D都不同程度的提供了插件功能,用户可以自己编写插件来完善或者定制编辑器。此外,我们也可以编写Visual Studio或XCode的插件来扩展这两种IDE。原创 2016-10-06 13:38:52 · 10098 阅读 · 1 评论 -
小话设计模式(零)设计模式可以满足你对编程的所有幻想(误)
什么是设计模式?设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结为什么使用设计模式?使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。上面被划掉的是我从百度百科设计模式中直接复制粘贴过来的。既然划掉了,那么就说一下我的理解。设计模式是编程过程中的一种中间层面的技巧或者经验(微观层面的如算法、数据结构、语法,宏观层面的如框架、工具箱、系统架构)。编程其实很简单,会写“Hello world”就是会编程了,会使用if和for语句原创 2016-09-12 23:56:34 · 1877 阅读 · 5 评论 -
小话设计模式(十三)职责链模式
职责链(Chain of Responsibility)职责链模式是一种行为模式,当多个对象都有机会处理请求的时候,为了避免请求的发送者和接收者之间的耦合关系,我们使用职责链模式将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。职责链模式最常用的地方就是在UI组件响应点击事件的时候,今天我们就以此为例。原创 2016-10-02 20:53:48 · 1130 阅读 · 0 评论 -
小话设计模式(十二)代理模式
代理(Proxy)模式是创建一个类型为其他对象提供一种代理以控制对这个对象的访问。代理模式有以下几种常见的应用:1、远程代理(Remote Proxy)为一个其他的地址空间里的对象提供一个本地代表,这样可以隐藏一个对象存在于不同地址空间的事实。2、虚代理(Virtual Proxy)为一个创建开销很大的对象提供代理,在需要创建的时候再延迟创建。3、保护代理(Protection Proxy)控制对原始对象的访问。4、智能指引(Smart Reference)取代了简单的指针,它在访问对象时执行一原创 2016-10-01 17:55:29 · 1666 阅读 · 0 评论 -
小话设计模式(十一)享元模式
享元模式运用共享技术有效的支持大量细颗粒的对象。一般使用享元模式的时候要满足下列所有情况:1、 一个应用程序使用了大量的对象。2、 完全由于使用大量的对象,造成了很大的存储开销。3、 对象的大多数状态都可以变外外部状态。4、 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。5、 应用程序不依赖与对象标识。原创 2016-10-01 17:24:40 · 970 阅读 · 0 评论 -
小话设计模式(二)工厂方法模式
工厂方法(Factory Method)由名虚构造器(Virtual Constructor),是一种创建型的设计模式。使用工厂模式的意图便是定义一个用于创建对象的接口,让子类决定实例化哪一个类。它似的一个类的实例化延迟到其子类。原创 2016-09-21 14:15:30 · 1043 阅读 · 0 评论 -
小话设计模式(三)抽象工厂模式
跨移动平台开发App的时候,要根据IOS和Android(或者其他平台)的各自的API来创建统一的接口,因为平台的差异性,往往需要大量的代码来统一。我们常用的跨平台的(游戏)开发工具,例如Cocos2dx和Unity3d,都帮我们实现了部分常用的接口,让我们大部分时候可以忽略平台的差异性。本文并不是要探究他们的实现方法,而是为这种平台差异带来的问题提供一种可行的解决方案——抽象工厂(Abstract Factory)模式。抽象工厂(又名Kit)提供一种创建一系列相关或者相互依赖对象的接口,而无需指定它们原创 2016-09-22 21:12:09 · 1029 阅读 · 0 评论 -
小话设计模式(四)生成器模式
生成器或者建造者(Builder)模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式一般就是用来构建变形金刚用的,如果非要抽象来讲,那么就是某个类型由不同的部分组成,而这些部分可以独立变化成不同的子类(例如创建迷宫或者组装赛车,再或者孢子)。原创 2016-09-23 15:00:54 · 2109 阅读 · 0 评论 -
小话设计模式(十七)观察者模式
观察者(Observer)模式,又称依赖(Dependents)模式,发布-订阅(Publish-Subscribe)模式,或者监听者(Listener)模式。它定义了对象间的一种一对多的依赖关系,当对象的状态发生改变时,所有依赖于它的独享都会得到通知并且自动更新。IOS里的定义了NSNotification来实现观察者模式(NSNotificationCenter是观察者模式和中介者模式的融合,而且还是个单例,它负责集中管理通知者和观察者)。而C#里定义了delegate和event这种广播委托/事原创 2016-10-03 18:17:52 · 1795 阅读 · 0 评论 -
小话设计模式(番外二)委托模式
委托(Delegate)模式定义了对象之间的一对一的关系,被委托方可以作为委托方的事件接收者或者数据源(Data Source),当它作为事件接受者的时候,可以认为它是一种特殊的观察者(参考小话设计模式(十七)观察者模式)。有人认为委托模式和代理模式是一个东西。(⊙o⊙)…好吧,可能是因为觉得Delegate的部分发音像代理而且可以将就着翻译成代理,但是实际上这是不同的两种模式(参考小话设计模式(十二)代理模式)。委托模式在IOS和Cocos2d-x(实际上就是借鉴了IOS的做法)得到了广泛的应用,二原创 2016-10-10 19:45:56 · 1213 阅读 · 0 评论 -
小话设计模式(六)适配器模式
适配器(Adapter)又名包装器(Wrapper),将一个类的接口转换成用户希望的另外一个接口,使得原本接口不兼容的类可以一起工作。适配器又分为类适配器和对象适配器,而类适配器的实现需要多重继承,而C#并不支持多重继承,所以本文只讨论对象适配器。原创 2016-09-26 08:56:52 · 1045 阅读 · 0 评论 -
小话设计模式(七)桥接模式
桥接(Bridge)模式,又名Handle/Body(未找到权威的中文翻译)模式,它将一个类的抽象部分与它的实现部分分离,使它们都可以独立的变化。原创 2016-09-26 14:19:24 · 978 阅读 · 1 评论 -
小话设计模式(八)装饰模式
装饰(Decorator)模式是动态地给一个对象添加一些额外的责任。就增加功能来讲,Decorator模式相比生成子类更加灵活。原创 2016-09-27 13:27:30 · 773 阅读 · 0 评论 -
小话设计模式(五)原型模式
原型(Prototype)模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原创 2016-09-25 22:55:16 · 636 阅读 · 0 评论 -
小话设计模式(九)组合模式
组合(Composite)模式将对象组合成树形结构以表示“部分-整体”的层次结构。这样使得用户对单个对象和组合对象的使用具有一致性。组合模式,听名字你可能比较陌生,但是你很可能是这种模式的用户,它的应用非常广泛,例如IOS里的UIView、Cocos2d-x里的Node以及Unity3d里的Transform都是典型的组合模式。原创 2016-09-29 21:48:38 · 2047 阅读 · 8 评论 -
小话设计模式(十)外观模式
外观(Fascade)模式定义一个高级的接口,将子系统里的一组接口整合起来,提供了一个统一的外观。在以下情况下可以考虑使用外观模式:(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互原创 2016-09-30 13:33:59 · 1907 阅读 · 5 评论 -
小话设计模式(番外三)有限状态机模式
有限状态机(Finite State Machine)定义了一系列状态,对象可以在这些状态之间有条件的转换,并且定义了一个状态机,这个负责管理所有的状态和状态之间的转换条件。一般使用事件来作为转换条件,而具体的转换规则由用户来制定。原创 2016-10-31 08:53:21 · 977 阅读 · 0 评论