设计模式
shuangde800
这个作者很懒,什么都没留下…
展开
-
【设计模式】学习笔记13:组合模式(Composite)
认识组合模式上一篇中,我们可以用迭代器来实现遍历一个集合(数组,ArrayList, Vector, HashTable等)。假设有这样一种集合结构i:餐厅里有一份菜单,菜单里面还有子菜单,其实就是一个树形的结构那么,之前的迭代器就不能用了。我们需要新的设计:1. 需要某种树形结构,可以容纳菜单,子菜单和菜单项2. 需要确定能够在每个菜单的各个项之间游走,而且至少要像现在用迭代器一样方便3. 我们也需要更有弹性地在菜单之间游走。比方说,可能只需要遍历甜点菜单,或者可以遍历餐厅的整个菜单原创 2013-08-20 00:13:43 · 2957 阅读 · 3 评论 -
【设计模式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)
在上篇中,我们学习了代理模式,并用Java RMI实现了一个最简单的远程代理。实际上代理模式并不仅仅应用与远程代理,还有很多其他的应用。比如:虚拟代理。代理模式可以以很多形式出现,但基本上符合一般代理的设计。为何有这么多的形式呢?因为代理模式可以被用在许多不同的例子中。走进代理模式我们打算建立一个应用程序,用来展现你最喜欢的CD封面。你可以建立一个CD标题菜单,然后从豆瓣等网站的在线服务中取得CD封面的图。如果使用Swing,可以创建一个Icon接口从网络上加载图像。唯一的问题是,限于连接带宽和原创 2013-08-28 00:10:39 · 5382 阅读 · 8 评论 -
【设计模式】学习笔记14:状态模式(State)
认识状态模式假设有一个糖果机, 它的工作状态图如下:要用代码实现糖果机的功能, 如果不用状态模式:一种方法是创建一个类,它的作用就是一个状态机,对每一个动作,我们都创建了一个对应的方法,这些方法用条件语句来决定在每一个状态内什么方法是最恰当的.比如对"投入25分钱"这个动作,对应的方法如下:原创 2013-08-22 00:15:46 · 32972 阅读 · 49 评论 -
【设计模式】学习笔记12:迭代器模式(Iterator)
走进迭代器模式迭代器几乎是最常用的一种设计模式,在各面向对象语言中都有实现。迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露出其内部的表示。迭代器模式能够让我们游走于聚合内的没一个元素,而又不暴露其内部的表示把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。原创 2013-08-14 20:35:26 · 1836 阅读 · 0 评论 -
【设计模式】学习笔记15:代理模式(Proxy Pattern)
本笔记内容:1. JAVA远程代理调用(RMI)2. 代理模式走进代理模式在上一篇的状态模式中,我们实现了一个糖果机GumballMachine, 客户通过投币可以买到糖果. 现在设想这样一种情况: 糖果机是属于某个糖果公司的,这个公司的CEO坐在办公室里喝茶,看报纸, 但他还想要随时了解糖果机的状态,比如还剩下多少个糖果,卖了多少钱等等. CEO要怎样才能远程"遥控"糖果机获取信息呢? 这就得用到代理模式(Proxy Pattern)了.可能我们会想到通过socket网络连接, 自己原创 2013-08-26 00:22:05 · 4710 阅读 · 6 评论 -
【设计模式】学习笔记11:模板方法(Template Method)
—— 工厂方法是模板方法的一种特殊版本。——如果你只想掌握一种设计模式,那么它就是模板方法!走进模板方法我们知道泡咖啡和泡茶的步骤是很类似的:咖啡泡法:1. 把水煮沸2. 用沸水冲泡咖啡3.把咖啡倒进杯子4.加糖和咖啡泡茶方法:1.把水煮沸2.用沸水侵泡茶叶3.把茶倒进杯子4.加柠檬原创 2013-08-14 00:43:52 · 2492 阅读 · 0 评论 -
【设计模式】学习笔记9:适配器模式(Adapter)
生活中的适配器在现实生活中,如果你需要在欧洲国家使用美国制造的笔记本电脑,那么你可能需要使用一个交流电的适配器。因为欧洲的插座和美国笔记本电脑的插头不一样,所以需要一个交流电适配器,通过这个美国笔记本插头就可以使用欧洲插座了。OO适配器和真实世界的适配器扮演着同样的角色:将一个接口转换成另一个接口,以符合客户的期望。原创 2013-08-13 00:19:57 · 1948 阅读 · 0 评论 -
【设计模式】学习笔记10:外观模式(Facade)
上一次我们已经知道了适配器模式是如何将一个类的接口转换成另一个符合客户期望的接口了。Java中要做到这一点,必须将一个不兼容接口的对象包装起来,变成兼容的对象。这次要学的是外观模式.外观模式是将一个或数个类的复杂的一切都隐藏在背后,只显露出一个干净美好的外观。走近外观模式假设要用Java设计一个家庭影院,包括DVD播放器,投影仪,自动屏幕,环绕立体声,甚至还有爆米花机,你设计了一些类:原创 2013-08-13 00:42:12 · 3097 阅读 · 5 评论 -
【设计模式】学习笔记8:命令模式(Command)
走进命令模式在餐厅的情境中,我们看看餐厅是怎样工作的:1、顾客走进餐厅,点好菜后,生成订单交给女服务员。2、女服务员把订单拿到厨房工作室,大喊一声:“订单来了!”3、厨师订单准备餐点。上面情境各角色职责:1、订单封装了顾客的请求。 和一般的对象一样,订单可以被传递,订单内包含一个方法 orderUp(), 这个方法封装了准备餐点所需的动作。订单内有厨师的引用。这些都被封装起来。2、女服务员的工作就是接受订单,然后调用订单的orderUp( )方法。这里的orderUp具体内容就是把订单交给原创 2013-08-12 00:30:48 · 2989 阅读 · 0 评论 -
【设计模式】学习笔记7:单件模式(Singleton)
走进单件模式有些对象我们只需要一个,比如:线程池,缓存,对话框,处理偏好设置和注册表的对象,日志对象,充当打印机,显卡等设备的驱动程序对象等。这些类的对象只能有一个实例,如果有多个,然而会导致许多问题产生。有人可能觉得,这只要用全局变量或者静态变量就可以做到了这样做的缺点:必须程序一开始就创建对象,但是有些对象可能用不到,耗费资源。而单件模式在需要时才创建原创 2013-08-10 00:49:35 · 2629 阅读 · 1 评论 -
【设计模式】学习笔记6:抽象工厂模式(Abstract Factory)
——工厂是很有威力的技巧,帮助我们针对抽象编程,而不要针对具体类编程。定义抽象工厂模式抽象工厂提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或关心)实际产出的具体产品是什么。这样一来,客户就从具体的原创 2013-08-08 01:22:49 · 2101 阅读 · 0 评论 -
【设计模式】学习笔记5:工厂模式(Factory Method)
认识工厂模式在简单工厂模式的SimpleFactory, 你确实可以创建比萨,但是其他部分:烘烤,切片等可能不同的店会有不同的差异。如果我们要在其他地方开比萨店,比如在北京开比萨店,那么北京的制作比萨是不一样风格的,使用这个类的话,可能就要修改代码。所以把制作比萨的代码绑在PizzaStore里,这样做没有弹性。那么要怎样做呢?注意,在设计模式中,所谓的“实现一个接口”,不一定就表示”写一个类,并利用implements关键词来实现某个java接口“,而是泛指“实现某个超类型(可以是类或接口)的某个原创 2013-08-07 01:38:06 · 2159 阅读 · 2 评论 -
【设计模式】学习笔记4:简单工厂模式(Simple Factory)
之前已经学过“针对接口编程,而不是针对实现编程”,但是,当使用“new”时,却的确是在实例化一个具体类,所以用的是具体实现,而不是接口。Duck duck = new MallardDuck( );上面就是常用的实例化的new 方法。用"new"有什么不好呢? 在技术上,new 没错,都是“改变”的错。针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。因为如果是针对接口而写,那么通过多态,它可以与任何新类实现该接口。但是,使用大量的具体类时,也是自找麻烦,因为一旦加入新的具体类,就必须改变原创 2013-08-06 01:30:10 · 2334 阅读 · 0 评论 -
【设计模式】学习笔记3:装饰者模式(Decorator )
认识装饰者模式在星巴克购买咖啡时,可以根据自己的要求,加入各种调料,例如:蒸奶、豆浆、摩卡或覆盖奶泡。星巴克会根据所加入的调料收取不同的费用。如何设计这个类?用装饰者模式,我们将以饮料为主体,然后再运行时以各种调料来“装饰”饮料。比如说,顾客想要摩卡和奶泡深焙咖啡:1、那一杯深焙咖啡作为主体对象2、以摩卡对象装饰它3、以奶泡对象装饰它4、调用cost方法计算出总价钱。定义装饰者模式装饰者模式是动态地将责任附加到对象上。若要拓展功能,装饰者模式提供了比继承更有弹性的替代方案。原创 2013-08-05 10:01:48 · 2301 阅读 · 0 评论 -
【设计模式】学习笔记2:观察者模式(Observer)
定义观察者模式观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到并自动更新。认识观察者模式我们先看看报纸和杂志的订阅是怎么回事:1、报社出版报纸2、你向某家报社订阅报纸,只要他们有新报纸出版,机会给你送来。只要你是他们的订户,你就会一直收到报纸3、当你不想再看报纸时,可以取消订阅,他们就不会再送新报纸来。4、只要报社还在运营,就会一直有人向他们订阅报纸或者取消报纸。出版者 +订阅者 = 观察者模式如果你了解报纸的订阅怎么回事,其实就知道观原创 2013-08-04 00:33:46 · 2308 阅读 · 0 评论 -
【设计模式】学习笔记1:策略模式(Strategy)
策略模式定义定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 设计原则1:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起设计原则2:针对接口编程,而不是针对实现编程 设计原则3:多用组合,少用继承原创 2013-08-04 00:29:52 · 3311 阅读 · 1 评论 -
【设计模式】学习笔记17:代理模式之保护代理与Java反射
本笔记内容:1. Java动态代理,反射机制2. 保护代理3. 应用保护代理实现的约会系统----------------------------------------------------------------------------走进保护模式我们知道,相亲节目已经在天朝的电视上已经火了多年了,说明了有广大同胞需要这个配对服务,更别说咱们程序猿这个群体了。现在要实现一个约会服务系统。你有一个好点子,想在这个服务系统中,增加一个评分功能。具体就是在服务中加入“顶”和"踩"的功能,浏览原创 2013-08-30 01:00:27 · 4286 阅读 · 0 评论