设计模式
happylife1527
这个作者很懒,什么都没留下…
展开
-
迭代器模式
http://blog.csdn.net/ACb0y/article/details/6087786迭代器模式 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而不是暴露该对象的内部表示。 一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式。你需要对聚集有多种方式遍历时,可以考虑用迭代器模式转载 2012-09-23 20:24:57 · 321 阅读 · 0 评论 -
(第Ⅱ部分 创建型模式篇)第5章 原型模式(Protype Pattern)
http://blog.csdn.net/zhanglei5415/article/details/1675564概述在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化?意图用原型实例转载 2012-09-22 09:35:46 · 307 阅读 · 0 评论 -
(第Ⅱ部分 创建型模式篇) 第4章 工厂方法(Factory Method)
http://blog.csdn.net/zhanglei5415/article/details/1675562概述在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的F转载 2012-09-20 00:33:35 · 336 阅读 · 0 评论 -
(第Ⅱ部分 创建型模式篇) 第3章 建造者模式(Builder Pattern)
http://blog.csdn.net/zhanglei5415/article/details/1675560概述在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,转载 2012-09-20 00:17:11 · 339 阅读 · 0 评论 -
设计模式Iterator(迭代器) (转载)
http://blog.csdn.net/yuemugong/article/details/5642710 [形成] 在Java程序中,在輸出List類型的對象時候,出現最多的程式塊就是: 1 for (int i = 0 ;ilist.size; i++){2 XXX x = (XXX)list.get(转载 2012-09-20 00:33:09 · 382 阅读 · 0 评论 -
(第Ⅱ部分 创建型模式篇) 第2章 抽象工厂模式(Abstract Factory)
http://blog.csdn.net/zhanglei5415/article/details/1675551概述在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模转载 2012-09-20 00:16:12 · 349 阅读 · 0 评论 -
(第Ⅱ部分 创建型模式篇) 第1章 单件模式(Singleton Pattern)
http://blog.csdn.net/zhanglei5415/article/details/1675540概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用转载 2012-09-20 00:15:48 · 328 阅读 · 0 评论 -
单件模式(c++)
单件模式是设计模式中最简单的模式了。 定义: 确保一个类只有一个实例,并提供一个全局的访问点。把一个类设计成自己管理的一个单独实例,同时避免其他类再自行生成实例(所以构造函数用protect或privite)也提供全局的访问点。public函数 看下代码的实现:1 class Singleton2 { 3 protected:4 Sin转载 2012-09-18 22:49:43 · 387 阅读 · 0 评论 -
关于23种设计模式的有趣见解
创建型模式1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建转载 2012-09-18 22:54:54 · 249 阅读 · 0 评论 -
装饰者模式(c++)
想象一下有如下的场景: 有两种主咖啡, 可以搭配任意的饮料,我们的目标是允许类容易扩展,在不修改现有代码的情况下,可以搭配新的行为。这里可以用装饰者模式来实现。1. uml 图 装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 这里吹一下装饰者模式的好处:每个组件都可以单独使用,或者被装饰者包装起来使转载 2012-09-18 22:50:38 · 416 阅读 · 0 评论 -
(第Ⅲ部分 结构型模式篇) 第9章 装饰模式(Decorator Pattern)
http://blog.csdn.net/zhanglei5415/article/details/1675572概述在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能转载 2012-09-22 10:26:29 · 290 阅读 · 0 评论 -
(第Ⅲ部分 结构型模式篇) 第13章 代理模式(Proxy Pattern)
摘要:在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。 主要内容1.例说Proxy模式2.Proxy模式效果及实现要点…… 概述在软件系统中,有些对象有时候由于跨越网络转载 2012-09-23 14:08:07 · 325 阅读 · 0 评论 -
(第Ⅲ部分 结构型模式篇) 第14章 结构型模式专题总结
摘要:结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。这些结构型模式,它们在某些方面具有很大的相似性,仔细推敲,侧重点却各有不同。本文试图对这几种结构型模式做一个简单的小结。 主要内容1.结构型模式概述2.结构型模式区别与比较3.对变化的封装 结构型模式概述结构型模转载 2012-09-23 14:08:21 · 313 阅读 · 0 评论 -
(第Ⅲ部分 结构型模式篇) 第10章 组合模式(Composite Pattern)
http://blog.csdn.net/zhanglei5415/article/details/1675576——.NET设计模式系列之十一Terrylee,2006年3月概述组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。意图将对象组合转载 2012-09-22 15:36:44 · 278 阅读 · 0 评论 -
(第Ⅲ部分 结构型模式篇) 第7章 适配器模式(Adapter Pattern)
http://blog.csdn.net/zhanglei5415/article/details/1675568概述在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter模式。意图转载 2012-09-22 10:25:44 · 290 阅读 · 0 评论 -
(第Ⅱ部分 创建型模式篇) 第6章 创建型模式专题总结
http://blog.csdn.net/zhanglei5415/article/details/1675567概述创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模式。为什么需要创建型模式所有的创建型模式都有两个永恒的主旋律:第一,它们转载 2012-09-22 09:36:07 · 333 阅读 · 0 评论 -
(第Ⅲ部分 结构型模式篇) 第12章 享元模式(Flyweight Pattern)
摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考、探索、权衡,通过比较而得出好的实现方式,而不是给你最终的转载 2012-09-22 15:38:27 · 296 阅读 · 0 评论 -
(第Ⅲ部分 结构型模式篇) 第11章 外观模式(Façade Pattern)
概述在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade模式。意图为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF《设计模式》]转载 2012-09-22 15:37:02 · 347 阅读 · 0 评论 -
(第Ⅲ部分 结构型模式篇) 第8章 桥接模式(Bridge Pattern)
http://blog.csdn.net/zhanglei5415/article/details/1675570Terrylee,2006年2月概述在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。意图将抽象部转载 2012-09-22 10:26:06 · 253 阅读 · 0 评论 -
(第Ⅳ部分 行为型模式篇) 第18章 观察者模式(Oberver Pattern)
概述在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象转载 2012-09-22 09:34:38 · 316 阅读 · 0 评论 -
(第Ⅳ部分 行为型模式篇) 第17章 迭代器模式(Iterator Pattern)
概述在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不转载 2012-09-23 14:08:58 · 247 阅读 · 0 评论 -
(第Ⅳ部分 行为型模式篇) 第16章 命令模式(Command Pattern)
概述在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合[李建忠]。这就是本文要说的Command模式。意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数转载 2012-09-23 14:08:46 · 332 阅读 · 0 评论 -
(第Ⅳ部分 行为型模式篇) 第15章 模版方法模式(Template Method)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要。 主要内容1.概述2.Template Method解说3..NET中的Template Method模式4.适用性及实现要点 概述变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的去抓住变化点,应对变化?如何更好转载 2012-09-23 14:08:30 · 297 阅读 · 0 评论 -
观察者模式(C++)
假设一个数据有三个部分显示数据的, 分别是 max, min,average,我们可以写下这个一个类: 1 class Datashow 2 { 3 public: 4 void measurmentChanged 5 { 6 float temp = getTemplate(); 7 float humidi转载 2012-09-18 22:51:04 · 422 阅读 · 0 评论 -
工厂模式(c++)
1. 场景 假设有如下的场景: 卖pizza的, 可以有很多种pizza(CheesePizza, GreekPizza, PepperoniPizza),我们该如何处理它呢,当然我们可以声明一个类,类中创建每一个种类的pizza。但是这样有什么问题吗?我们没有把需要改变的部分剥离出来。软件设计的一个原则就是“是易于扩充而不是修改”,另一个是“对接口编程而不是对实现编程”。转载 2012-09-18 22:50:08 · 470 阅读 · 0 评论 -
原型模式( Prototype Pattern)
一、原型模式简介(Brief Introduction)原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。Specify the kind of objects to create using a prototypical instance, and create new objects by copying this proto转载 2012-09-13 21:52:00 · 322 阅读 · 0 评论 -
观察者模式(Observer)
http://goodcandle.cnblogs.com/archive/2005/10/12/ObserverPattern.html作用: 在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变。 正文: 观察者模式是一对多的模式,是那种你一旦理解了,就会觉得到处都可以用的模式之一,所以你一定要抵挡的住诱惑,过度使用观察者模式往往会导致系统难转载 2012-09-12 12:40:36 · 426 阅读 · 0 评论 -
State模式
作用: 允许一个对象在其内部状态改变时改变它的行为。 避免if语句嵌套过深或过于复杂,易添加新的状态。正文: State模式是一种有限状态机,它很好的解决了if语句嵌套过深或过于复杂,能容易理清状态之间的复杂逻辑,就是“何时干何事”。而且很容易的添加新的状态或修改原有的状态。 在State模式中,一个事件会引起状态的迁移。转载 2012-09-12 12:43:12 · 385 阅读 · 0 评论 -
小三的故事-发家篇
小三真名李靖,年龄27,家里排行老三,村里人都叫他小三。高考落榜,在家务农。虽然没有考上大学,但到底是喝了12年的墨水,想法比别人多。 一日小三去小县城,看到很多城里的人都很喜欢吃乡下的薯条(不是KFC的那种噢),小三就有想法了:“这薯条在乡下都没人吃,成本也很低,但在城里却这么吃香,我可不可以尝试一下呢?” 说干就干,小三就回家开始行动了,但家里人都不太同意,小三转载 2012-09-12 12:35:32 · 874 阅读 · 0 评论 -
隐身大法,使民无知
http://www.cnblogs.com/goodcandle/archive/2006/02/14/hide.html“明者保身,但求无过”,如何保身呢? 其实最好的办法是让自己保持神秘,尽量少的公开自己的信息,使民无知。 好的软件设计追求的就是这种境界。 这里的“民”指得就是“客户”。尽量少的公开接口,给客户一个“瘦”接口,使客户不知道具转载 2012-09-12 12:41:40 · 1023 阅读 · 0 评论 -
成长的烦恼
http://www.cnblogs.com/goodcandle/archive/2006/01/23/322033.html 源码工作室 相信很多人都喜欢看这部喜剧,我是很喜欢,里面包括了成长中的悲欢离合,你在其中可以寻找你成长的足迹。 编程成长之路何尝不是这样的呢? 故事就是从这里开始的。转载 2012-09-12 12:37:51 · 385 阅读 · 0 评论 -
装饰者模式(Decorator)
前言上篇【观察者模式】发布已经近一个月了,个人感觉反应并不太理想,因为大家响应都不是很积极,不知是文章那里写得有问题,而且也没有人提出过有价值的改进建议,多少感觉有些失望L!因为工作繁忙,所以不可能把主要精力投入到写作上,因此这个系列的文章更新有些缓慢,但是每篇文章我一直坚持高质量(这是最重要的),而且同样注重大家的反馈,一直希望大家能以这些文章为媒介,换来思想碰撞的火花,使每篇文章都能成为大转载 2012-09-11 23:48:38 · 594 阅读 · 0 评论 -
模式和原则
前言正式接触使用设计模式近两年了,一直想写点东西来巩固所学,但是迟迟没有动作,总想时间和见识再多一些的时候再动笔,但是拖得越久越感觉合适的时机永远不会有,只有不断实践才能换来进步,也许再不写就永远也写不出来了,于是我终于开始了。谈到设计模式,应该还没有人能超越GOF的开山之作,所以谈不上什么创新,归根结底还是重复前人的论述和思想,更多的只能是整理和个人的一些心得体会。因为从设计模式诞生以来转载 2012-09-11 23:47:03 · 765 阅读 · 0 评论 -
策略模式(Strategy)
http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html鸭子-策略模式(Strategy)前言 万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜刮出了一点儿不太清晰的轮廓,可是时间不等人,以后再多“迭代”转载 2012-09-11 23:46:01 · 419 阅读 · 0 评论 -
我也设计模式——4.Builder
http://www.cnblogs.com/Jax/archive/2007/04/10/707391.html但凡是模式,总要有一个UML才能说清楚。一般而言,我只记UML图,有些模式有自己的固定实现代码(只是其中一部分),尤其在C#中,甚至只是把用户当作一个Client端,而不暴露其内部实现,只把封装好的模式接口公布。于是,我会再记一些固定方法实现。还有就是适用场合(多看例子),优缺点。转载 2012-09-07 22:56:05 · 412 阅读 · 0 评论 -
十三种设计模式的思维导图
十三种设计模式的思维导图2011-03-29 12:30 20人阅读 评论(0) 收藏 举报转载 2012-09-07 22:54:33 · 3245 阅读 · 0 评论 -
中介者模式(Mediator)
http://www.cnblogs.com/goodcandle/archive/2005/11/21/Mediator.html侃中介者模式 作用: 用一个中介对象来封装一系列的对象操作。中介者使各对象不需要显式地相互交互,从而使其耦合松散,而且可以独立地改变它们之间的交互。正文: 中介者模式是一个简单易用的模式。也许很多人在实际的项目中都已经用到过转载 2012-09-12 12:42:33 · 431 阅读 · 0 评论 -
装饰模式(Decorator)
装饰模式可以在不改变现有类的情况下向其中添加新方法。(敏捷软件开发-原则 模式与实践 Robert C. Martin)这是Martin对装饰模式作用的说明,他也举了个modem的例子。这句话的意思是一点不改变现有类的代码而向其中添加新方法。那么有人会问,如果我有代码,有些时候我是否直接把新的方法加在已有的类中来的简单呢?是的,在特定的时期直接加在类中来的简洁,但有些时候,虽然你有类的源代码,但你转载 2012-09-12 12:43:58 · 492 阅读 · 0 评论 -
单例模式( Singleton Pattern)
一、单例模式简介(Brief Introduction)单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点。单例模式因为Singleton封装它的唯一实例,它就可以严格地控制客户怎样访问它以及何时访问它。二、解决的问题(What To Solve)当一个类只允许创建一个实例时,可以考虑使用单例模式。 三、单例模式分析(A转载 2012-09-13 21:49:38 · 306 阅读 · 0 评论 -
观察者模式(Observer Pattern)
一、观察者模式简介(Brief Introduction)观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化的时,会通知所有观察者对象,使他们能够自动更新自己。二、解决的问题(What To Solve)当一个对象的改变需要同时改变其他对象的时候,而且不知道有多少对象有待改变时,应该考虑使用观察者模式。观察者模式所做的工作其实就转载 2012-09-13 21:50:27 · 377 阅读 · 0 评论