代码改变世界

随笔分类 - 设计模式(原创)

装饰器(Decorator)模式

2012-11-23 10:29 by Rollen Holt, 1845 阅读, 收藏, 编辑
摘要: 转自:http://miaoxiaodong78.blog.163.com/blog/static/18765136200701232434996/ Decorator设计模式是典型的结构型模式(在GOF的那本模式的Bible中将模式分为:1.创建型模式;2.结构型模式;3.行为模式三种)。它的主要用意是:动态地为对象添加一些额外的功能。(记住上面两种颜色的词汇,理解装饰器模式的精髓所在!)下面是GOF的《ElementofreusableObject-Oriented Software》中对Decorator用意的概述:Decorator Pattern――Attaches addition 阅读全文

Design Pattern: Composite 模式

2012-04-23 20:36 by Rollen Holt, 733 阅读, 收藏, 编辑
摘要: 如果以绘图为例的话,一个文字是一个绘图元件,一个线段是一个绘图元件,而一个长方形也是一个绘图元件,这些绘图元件可以组成一个图片,如果将这个图片也 视作一个绘图元件,则这么递回绘图下去,就可以组合成一个较大的、复杂的图形元件,这样的目的可以使用Composite模式来解决。 对于使用者而言,无论是文字、线段或长方形,甚至是组合后的图片元件,它们都拥有一个共同的行为,使用者基本上并不会感觉出它们之... 阅读全文

Design Pattern: Facade 模式

2012-04-23 20:35 by Rollen Holt, 597 阅读, 收藏, 编辑
摘要: 考虑您要撰写一个Web Mail程式,您手上已经有一些已经开发好的元件(Component),像是开发Web Mail所需要的SMTP处理类、允许上传附档的FileUpload类,以及Web安全相关的API、其它相关的Package等等。 当您拿到一些现成的元件,并打算在您的应用程式中使用它们的话,您不应该直接将这些元件耦合至您的应用程式上,例如: 上面的作法会让您的应用程式直接... 阅读全文

Design Pattern: Bridge 模式

2012-04-23 20:31 by Rollen Holt, 559 阅读, 收藏, 编辑
摘要: 在 Gof 的书中指到Bridge模式的目的:“将抽象部份与它的实现部份分离,使它们都可以独立地变化。” 这句话写得简短,这边再作进一步的解释,抽象部份指的是行为方面定义,实现方面指的是与特定平台相依的代码实现。 一个实际的例子在Gof书中有提到,假设您定义了一个IWindow介面,这个介面只定义一些抽象的绘图行为,而不涉及平台的实作,今天您可以继承这个类 来开发适用于X Window... 阅读全文

Design Pattern: Adapter 模式 - Class Adapter

2012-04-23 20:27 by Rollen Holt, 590 阅读, 收藏, 编辑
摘要: Adapter模式的另一种作法是Class Adapter模式,在这个模式下,Adapter直接继承Adaptee(要引进的新类别),以拥有当中的成员及方法,在C++中的话可以这么作: C++中可以多重继承,但在Java中不行,所以在Java中若要采用Class Adapter,必须作点修改,一方面继承Adaptee,一方面实作Target的介面: 代码的实现是这样的: publi... 阅读全文

Design Pattern: Adapter 模式 - Object Adapter

2012-04-23 20:25 by Rollen Holt, 589 阅读, 收藏, 编辑
摘要: 您的电脑是个旧电脑,新的滑鼠都在使用USB接口了,而您的电脑上并没有USB,而只有一个PS2接口,这时您可以使用一个USB转PS2的接头作为转换,这样您的电脑就可以使用新滑鼠了(当然您也可以使用USB扩充卡,意思是相同的)。 类似的概念,有时候您想在原来的程式中加入一个外部元件,例如一个类别,但是这个类别与您目前所设计的程式在介面上并不一致,为了让这个外部类与原程式的介面一致,您必须使用一个类... 阅读全文

Design Pattern: Default Adapter 模式

2012-04-23 20:15 by Rollen Holt, 554 阅读, 收藏, 编辑
摘要: 在Java中如果要定义事件处理的方式,必须实作EventListener的子介面,例如实作 WindowListener来定义一些视窗事件的处理方式,WindowListener中定义了七个方法: public interface WindowListener extends EventListener { public void windowOpened(WindowEvent e... 阅读全文

Design Pattern: Registry of Singleton 模式

2012-04-23 20:11 by Rollen Holt, 561 阅读, 收藏, 编辑
摘要: 一句话概括:您可以使用父类别来统一管理多个继承的子类别之Singleton实例,您可以在需要的时候再向父类别注册子类 Singleton,必要时随时调整传回的子类别Singleton。 考虑使用 Singleton 模式 时拥有子类别的问题,在Singleton模式中的getInstance()通常是一个静态方法,不能在子类别中重新定义它,关于子类别实例的产生交由getInstance()来进行... 阅读全文

Design Pattern: Singleton 模式

2012-04-23 19:53 by Rollen Holt, 763 阅读, 收藏, 编辑
摘要: 一句话概括:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 Singleton的英文意义是独身,也就是只有一个人,应用在物件导向语言上,通常翻译作单例:单一个实例(Instance)。 很多时候,您会需要Singleton模式,例如印表机管理,您希望程式中只能有一个Print Spooler,以避免两个列印动作同时输入至印表机中;例如资料库管理,因为建立连接(Connection)物... 阅读全文

Design Pattern: Prototype 模式

2012-04-23 19:45 by Rollen Holt, 600 阅读, 收藏, 编辑
摘要: 一句话概括:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 您从图书馆的期刊从发现了几篇您感兴趣的文章,由于这是图书馆的书,您不可以直接在书中作记号或写字,所以您将当中您所感兴趣的几个主题影印出来,这下子您就可在影印的文章上画记重点。 Prototype模式的作用有些类似上面的描述,您在父类别中定义一个clone()方法,而在子类别中重新定义它,当客户端对于所产生的物件有... 阅读全文

Design Pattern: Factory Method 模式

2012-04-23 19:32 by Rollen Holt, 627 阅读, 收藏, 编辑
摘要: 简单的说就是定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。 考虑一个状况,您所经营的工厂正在生产一个新的电视机产品,现在有一个问题发生了,您的电视机产品所有的组件都可以自行生产,像是操作面版、电源、摇控装置等等等,但荧幕却必须依赖另一个厂商或子厂商供应,这时您怎么办? 您不能将生产进度停下了,相反的您... 阅读全文

Design Pattern: Builder 模式

2012-04-23 19:20 by Rollen Holt, 583 阅读, 收藏, 编辑
摘要: 原文:http://www.riabook.cn/doc/designpattern/BuilderPattern.htm 您想要建立一个迷宫产生程式,迷宫使用二维阵列来定义,0表示道路,1表示墙,2表示宝物,根据所定义的二维迷宫阵列,您想要程式自动产生各种不同材质的迷宫,例如砖墙迷宫,钻石迷宫等等。 您可以在程式中定义两个角色,一个是指导迷宫建立的Director角色,一个是按照指导者指示... 阅读全文

Design Pattern: Abstract Factory 模式

2012-04-23 19:14 by Rollen Holt, 624 阅读, 收藏, 编辑
摘要: 原文地址:http://www.riabook.cn/doc/designpattern/AbstractFactory.htm 假设您要制作一个对话方块(Dialog)元件,您希望的是这个对话方块可以有不同的视感(Look-and- feel),最基本的想法是,藉由Setter将不同视感的元件设定给这个对话方块,例如: CustomDialog.java public class... 阅读全文

设计模式--Simple Factory 模式

2012-04-23 19:02 by Rollen Holt, 1021 阅读, 收藏, 编辑
摘要: Simple Factory模式(又称Static Factory模式),一个Simple Factory生产成品,而对客户端隐藏产品产生的细节。实作时定义一个产品介面(interface),并透过特定静态方法来建立成品。 假设有一个音乐盒工厂,购买音乐盒的客人不用知道音乐盒是如何制作的,他只要知道如何播放音乐盒就可以了,以 UML 类别图来表示以上的概念: 如上图所示的,MusicBo... 阅读全文

设计模式---适配器模式

2011-08-18 17:29 by Rollen Holt, 1342 阅读, 收藏, 编辑
摘要: /** * @author Rollen-Holt 设计模式之 適配器模式 */interface window{ void open(); void close(); void activated(); void iconified();}abstract class WindowAdapter{ public void open(){ } public void close(){ } public void activated(){ } public void iconified(){ }}class AdapterDemo extends WindowAdapter{ public vo 阅读全文

设计模式---单例模式

2011-08-18 17:13 by Rollen Holt, 1494 阅读, 收藏, 编辑
摘要: /** * @version 1.0 * @author Rollen-Holt * 设计模式之 ---单例模式 * */class hello{ private hello(){ System.out.print("hello"); } public static hello getHello(){ return new hello(); } public static void main(String[] a0){ hello.getHello(); }} 阅读全文

设计模式---工厂模式

2011-08-18 17:10 by Rollen Holt, 8612 阅读, 收藏, 编辑
摘要: /** * @author Rollen-Holt 设计模式之 工厂模式 */interface fruit{ public abstract void eat();}class Apple implements fruit{ public void eat(){ System.out.println("Apple"); }}class Orange implements fruit{ public void eat(){ System.out.println("Orange"); }}// 构造工厂类// 也就是说以后如果我们在添加其他的实例的时候只需 阅读全文

设计模式---代理模式

2011-08-18 17:09 by Rollen Holt, 30373 阅读, 收藏, 编辑
摘要: /** * @author Rollen-Holt 设计模式之 代理模式 */interface NetWork{ public abstract void browser();}/** * Real 类代表用户上网的实际动作,比如查看网页 * */class Real implements NetWork{ public void browser(){ System.out.println("上网浏览信息"); }}/** * 此处使用代理类来完成中间代理的工作,屏蔽实现代理的细节 * */class proxy implements NetWork{ private N 阅读全文