
设计模式的艺术
文章平均质量分 86
设计模式是软件构建必不可少的手段,本专栏收录常用的设计模式及实践,力将设计模式融入到软件设计过程中。设计模式的艺术,为构建具有艺术性的软件而努力!
「已注销」
这个作者很懒,什么都没留下…
展开
-
设计模式初探-访问者模式
访问者模式(VISITOR),提供一个作用于某对象结构中各元素的操作表示,并使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作,属于对象行为型模式。使用Visitor模式,必须定义两个类层次:一个对应于接受操作的元素(Element层次),另一个对应于定义对元素的操作的访问者(Visitor层次)。给访问者类层次增加一个新的子类即可创建一个新的操作,但如果新增一个接受操作的元素,则需要原创 2014-02-17 20:43:58 · 1496 阅读 · 0 评论 -
设计模式初探-外观模式
外观模式(FACADE),也叫门面模式,属于对象结构型模式,通过为子系统中的一组接口提供一个一致的界面(外观对象)来简化客户端与子系统之间的交互。Facade模式定义了一个高层接口,这个接口为子系统中较一般的设施提供一个单一而简单的界面,从而使子系统间的通信和相互依赖关系达到最小,并且隔离了客户类和子系统类,降低了两者的耦合度。如下图所示:一、使用场景 1、 当要为访问一系列复原创 2014-01-12 23:25:22 · 1473 阅读 · 0 评论 -
设计模式初探-装饰模式
装饰模式(DECORATOR模式),又称包装器Wrapper,属于对象结构型模式,用于动态地给一个对象添加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。它通过使用对象之间的关联关系取代类之间的继承关系,引入的装饰类既可以调用被装饰类的方法,还可以添加新的业务逻辑,以达到扩充被装饰类的功能。装饰模式和适配器模式虽然都称为包装器,但两者还是不同的。装饰模式只是在原有对象的基原创 2014-01-12 04:00:28 · 1697 阅读 · 0 评论 -
设计模式初探-组合模式
组合模式,英文为COMPOSITE模式,属于对象结构型模式。用于组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。通常树形结构,比如公司组织结构,文件目录,系统菜单,xml文件解析等都可以采用组合模式实现。一、适用场景1、在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,客户端可以一致原创 2014-01-10 16:22:54 · 1437 阅读 · 0 评论 -
设计模式初探-模板方法模式
模板方法模式(TEMPLATE METHOD),用于定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,属于类行为型模式。模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为原创 2014-02-16 15:40:46 · 2302 阅读 · 0 评论 -
设计模式初探-策略模式
策略模式(STRATEGY),别名政策(Policy),通过将一系列的算法封装成一个个的策略对象,使算法可以相互替换,并能独立于使用它们的客户而变化,属于对象行为型模式。软件开发过程中,通常要设计相应的算法,比如电子网站中经常有折扣活动,并且用户等级不同,享受的折扣也不一样。通过使用策略模式将折扣算法封装起来,不仅可以用于网商平台,还可以用于手持设备中折扣活动的实现。封装的特性确保了扩展算法和增加原创 2014-02-15 17:15:45 · 1648 阅读 · 0 评论 -
设计模式初探-状态模式
状态模式(STATE),别名状态对象(Objects for States),允许一个对象在其内部状态改变时改变它的行为,就起来就像修改了它的类,属于对象行为型模式。状态模式通过将所有与特定状态相关的行为封装到一个或多个状态对象中,当状态改变时,其行为也会随着改变,从而简化大量的条件判断,使代码逻辑更清晰,更易于维护。大千世界,可以看做各个状态的转换。人,生老病死;水,固液气三态转化;天气,阴晴不原创 2014-02-14 21:14:02 · 1727 阅读 · 1 评论 -
设计模式初探-观察者模式
观察者模式(OBSERVER),又称发布-订阅(Publish-Subscribe),依赖(Dependents),通过定义对象间的一对多的依赖关系,达到当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新,属于对象行为型模式。观察者模式在软件设计中很常用,比如经典的MVC模式,Model为目标类,View为观察者,Controller为更新管理器。首先更新管理器即控制器先将视图和模原创 2014-02-12 22:35:58 · 1793 阅读 · 0 评论 -
设计模式初探-备忘录模式
备忘录模式(MEMENTO),又称Token,通过在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以待需要时将该对象恢复到原先保存的状态。备忘录模式很适合实现软件中的撤销和重做功能,在字处理软件,图像编辑软件,数据库管理软件中十分常见。游戏里也常常可以使用备忘录模式来保存游戏的状态,如游戏失败前的状态,游戏暂停时的状态,以备玩家重新接着死亡前的关卡继续或从暂停状态恢复,原创 2014-02-10 22:30:46 · 1381 阅读 · 0 评论 -
设计模式初探-中介者模式
中介者模式(MEDIATOR),又称调停者模式,通过使用一个中介者对象来封装一系列的对象交互,属于对象行为型模式。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。现实生活中,到处充斥着中介者模式的身影。上到庄严的法院,下到为程序员带来福音的婚姻介绍所或交友平台,还有可恶的房产中介,都是中介者模式的体现。比如,你参加一个相亲活动,20多对男女如饥似渴地寻找着自原创 2014-01-25 22:56:53 · 1760 阅读 · 0 评论 -
设计模式初探-迭代器模式
迭代器模式(ITERATOR),又称游标(Cursor),提供了一种方法,用于顺序访问一个聚合对象中的各个元素,而不需暴露该对象的内部表示。迭代器模式通过将对聚合对象(通常为列表)的访问和遍历从聚合对象中分离出来并放入一个迭代器对象中,迭代器对象知道如何遍历列表,这样不仅可以简化聚合对象的实现(将遍历操作交给迭代器负责,自己只负责保存),还可以以不同的方式遍历列表。一、使用场景1、访问一个原创 2014-01-25 13:58:39 · 1794 阅读 · 0 评论 -
设计模式初探-解释器模式
解释器模式(INTERPRETER),通过面向对象的方式构造语言解释器,并使用该解释器按照一定的文法解释语言中的句子,属于类行为模式。记得大学时候参加过机器人足球比赛,通过面板输入指令"up move 10 and left run 8",足球机器人就会执行相应的动作。将这些指令组合就能完成高难度的射门,躲避,可谓智能也!下面将通过机器人指令解释来阐述解释器模式的强大。一、使用场景1、当有原创 2014-01-25 01:29:08 · 3328 阅读 · 3 评论 -
设计模式初探-命令模式
命令模式(COMMAND),又称动作(Action),事务(Transaction),通过将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,实现对请求排队或记录请求日志,以及支持可撤销的操作。命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。一、使用场景1、需要抽象出待执行的动作以参数原创 2014-01-19 16:17:11 · 1818 阅读 · 0 评论 -
设计模式初探-责任链模式
责任链模式(CHAIN OF RESPONSIBILITY),通过将多个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它,属于对象行为型模式。责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。JavaScript的事件处理,工作流系统中公文的多级审批,Web开发中的过滤器和拦截器都可以采用责任链模式实现。一、使用场景1、有多个对象可以处理同一个请求原创 2014-01-18 21:50:07 · 2255 阅读 · 0 评论 -
设计模式初探-代理模式
代理模式(PROXY),别名Surrogate(代理),通过为其他对象提供一种代理以控制对这个对象的访问,属于对象结构型模式。软件开发中,经常会出现特殊对象,创建这些对象时开销很大,比如文档中的图片,数据库连接等,我们应该根据需要对这些对象进行创建,当图片可见时创建图片对象,当数据库连接真的需要执行时创建连接。通过创建代理,我们可以控制对象的创建,访问时机。创建图片代理,将其作为占位符插入到文档中原创 2014-01-18 02:52:21 · 2023 阅读 · 0 评论 -
设计模式初探-享元模式
享元模式(FLYWEIGHT),通过运用共享技术有效地支持大量细粒度的对象,由于处理的是细粒度的对象,所以也称为轻量级模式,属于对象结构型模式。享元模式的共享技术是通过区分对象的内部状态和外部状态来实现的。内部状态是对象的内在特征,不会随环境的变化而变化,所以能够共享。外部状态是对象的外在表现,随环境的改变而改变,不可以共享。对于我们经常查看的文章,参考的资料,组成它们的字母或汉字代表的意义是不变原创 2014-01-15 00:30:13 · 1891 阅读 · 0 评论 -
设计模式初探-适配器模式
适配器模式,又称包装器Wrapper,用于将一个类的接口转换成客户希望的另外的一个接口,从而解决因接口不兼容导致类之间不能工作的问题。Adapter模式是不兼容结构的协调者,犹如法官大人,给人们带来希望。生活中处处可见适配器模式的踪影,电源适配器,USB适配器,生活因为适配而美好!一、使用场景1、系统中已存在类的接口不满足现有需求,且一般无法改变现有类的接口,比如该类是第三方提供,无法修改原创 2014-01-04 02:57:38 · 2004 阅读 · 0 评论 -
设计模式初探-单例模式
Singleton模式,又称单例模式,它保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式在平常开发中经常用到,比如系统的全局配置属性,常用的工具类或工厂方法都可以实现为一个单例。单例模式概念很简单,实现起来也不麻烦,但一不小心还是有可能出错的。一、使用场景只要是要求实例唯一的都可以使用单例模式来实现,特别是耗资源的实例!二、UML图三、Java实现1、懒汉原创 2014-01-03 00:00:37 · 1641 阅读 · 0 评论 -
设计模式初探-Prototype模式
Prototype模式,也称原型模式,属于对象创建型模式。通过使用原型实例指定创建对象的种类,然后拷贝这些原型来创建新的对象。Prototype模式允许一个对象再创建另一个可定制的对象,即使不知道任何创建的细节,就像JavaScript中通过prototype原型公用基本的方法或属性,然后在克隆后的原型基础上添加自己的定制。一、使用场景1、当一个系统应该独立于它的产品创建,构成和表示时,这原创 2013-12-31 00:51:04 · 1862 阅读 · 2 评论 -
设计模式初探-工厂方法模式
工厂方法模式,Factory Method,属于对象创建型模式,通过定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。工厂方法通过抽象的接口,将创建对象的行为交给具体的子类。一、使用场景1、当一个类不知道它所必须创建的对象的类的时候,由于不知道要创建对象的类,所以不能直接实例化类,只能交给其他知道该类的类去做,比如某接口的具体实原创 2013-12-29 16:49:08 · 1738 阅读 · 3 评论 -
设计模式初探-Builder模式
Builder模式,又称生成器或构建者模式,属于对象创建型模式,侧重于一步一步的构建复杂对象,只有在构建完成后才会返回生成的对象。Builder模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。一、使用场景1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时,比如买一台电脑,我不需要知道电脑CPU,主板,机箱是如何生产的,也不需要知道它们是如何原创 2013-12-29 00:26:22 · 1876 阅读 · 1 评论 -
设计模式初探-抽象工厂模式
抽象工厂模式,Abstract Factory,按GOF的划分属于对象创建型模式,用于提供一个创建一系列相关或相互依赖对象的接口,而不用指定它们具体实现的类,很好的实践了“面向接口编程”的准则。一、使用场景:1、一个系统要独立于它的产品的创建,组合和表示,比如跨操作系统的文本编辑器,文本编辑器操作的应该是编辑器视图组件独立于操作系统的抽象,而不是具体于某操作系统的实现。2、一个系统要由原创 2013-12-28 17:21:56 · 1552 阅读 · 0 评论 -
设计模式初探-桥接模式
桥接(Bridge)模式,又称Handle/Body模式,属于对象结构型模式。用于将抽象部分与它的实现部分分离,使它们都可以独立地变化。比如常见的电脑窗口界面,不同的操作系统其窗口界面绘制的原理肯定不一样。这里,窗口界面就相当于抽象部分(Abstraction),而窗口界面本身也可以随着功能的不同而进行扩充,扩充的窗口就是抽象窗口的扩充抽象类(RefinedAbstraction),这些抽象需要具原创 2014-01-06 23:55:58 · 1666 阅读 · 0 评论