- 浏览: 1339021 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
假设您要制作一个对话方块(Dialog)元件,您希望的是这个对话方块可以有不同的视感(Look-and- feel),最基本的想法是,藉由Setter将不同视感的元件设定给这个对话方块,例如:
- CustomDialog.java
public class CustomDialog { private IButton button; private ITextField textField; public void setButton(IButton button) { this.button = button; } public void setTextField(ITextField textField) { this.textField = textField; } public void layoutAllComponents() { // .... } public void showDialog() { this.paintDialog(); button.paintButton(); textField.paintTextField(); } public void paintDialog() { System.out.println("custom dialog paints...."); } }
很简单,这是最基本的介面依赖,Setter依赖于IButton与ITextField两个介面,而不是其实作类别,不过这边还有个进一步的要求,使用上面的方式还必须亲自呼叫Setter、layout等方法,您希望视感的更换可以更简单些,例如只要透一个元件的替换就可以完成对话方块上所有元件的视感更换。
您可以使用Abstract Factory模式,将所有对话方块所需要的产生的元件加以封装,对话方块依赖于Abstract Factory,实际上具体的Factory实现则分别产生对话方块所需要的视感元件,下面的 UML 类别图展现这种概念。现在如果要更换所有的视感元件,就只要抽象掉具体的Factory就可以了,例如:
CustomDialog windowsDialog =
new CustomDialog(new WindowsWidgetFactory());
windowsDialog.showDialog();
CustomDialog macDialog =
new CustomDialog(new MacWidgetFactory());
macDialog.showDialog();
new CustomDialog(new WindowsWidgetFactory());
windowsDialog.showDialog();
CustomDialog macDialog =
new CustomDialog(new MacWidgetFactory());
macDialog.showDialog();
来将上面的UML图具体实现出来。
- CustomDialog.java
public class CustomDialog { private IButton button; private ITextField textField; public CustomDialog(IWidgetFactory widgetFactory) { setWidgetFactory(widgetFactory); } // 由于客户端只依赖于抽象的工厂,工厂如何实作并无关客户端的事 // 要抽换工厂并不需要改动客户端的程式 public void setWidgetFactory(IWidgetFactory widgetFactory) { setButton(widgetFactory.getButton()); setTextField(widgetFactory.getTextField()); } public void layoutAllComponents() { // layout all components } // 这边也是依赖抽象,实际改变了元件实例 // 客户端代码也不用更改 public void setButton(IButton button) { this.button = button; } public void setTextField(ITextField textField) { this.textField = textField; } public void showDialog() { this.paintDialog(); button.paintButton(); textField.paintTextField(); } public void paintDialog() { System.out.println("custom dialog paints...."); } }
- IButton.java
public interface IButton { public void paintButton(); }
- ITextField.java
public interface ITextField { public void paintTextField(); }
- IWidgetFactory.java
public interface IWidgetFactory { public IButton getButton(); public ITextField getTextField(); }
- MacButton.java
public class MacButton implements IButton { public void paintButton() { System.out.println("Mac button paints...."); } }
- WindowsButton.java
public class WindowsButton implements IButton { public void paintButton() { System.out.println("Windows button paints...."); } }
- MacTextField.java
public class MacTextField implements ITextField { public void paintTextField() { System.out.println("Mac textField paints...."); } }
- WindowsTextField.java
public class WindowsTextField implements ITextField { public void paintTextField() { System.out.println("Windows textField paints...."); } }
- MacWidgetFactory.java
public class MacWidgetFactory implements IWidgetFactory { public IButton getButton() { return new MacButton(); } public ITextField getTextField() { return new MacTextField(); } }
- WindowsWidgetFactory.java
public class WindowsWidgetFactory implements IWidgetFactory { public IButton getButton() { return new WindowsButton(); } public ITextField getTextField() { return new WindowsTextField(); } }
简单的说,在Abstract Factory模式中将具体的Product封装在具体Factory实现中,而客户仍只要面对Factory与Product的抽象介面,避免依赖于具体的Factory与Product,由于Factory封装了所必须的Product,所以要更换掉所有的元件,只要简单的抽换掉Factory就可以了,不用修改客户端的程式。
发表评论
-
Java 事件传送技术
2010-12-20 14:16 1489developerWorks 中国 ... -
Design Pattern: Mediator 模式
2010-11-13 23:31 1275Mediator的意思是中介者、调节者、传递物,顾名思义,这个 ... -
Design Pattern: Command 模式
2010-11-13 23:30 1106如果您写过Java的Swing视窗程式,您可能使用过Comma ... -
Design Pattern: Strategy 模式
2010-11-13 23:25 1293考虑您要设计一个更换各种符号的工具类TextCharChang ... -
Design Pattern: State 模式
2010-11-13 23:22 1053如果您不了解TCP的连线方式,在看 Gof 的书介绍State ... -
Design Pattern: Read-Write-Lock 模式
2010-11-10 23:58 1180如果有一个资料档有可能同时间会有许多客户端对它进行读取与写入的 ... -
Design Pattern: Producer Consumer 模式
2010-11-10 23:52 1318Producer Consumer模式与 Guar ... -
Design Pattern: Guarded Suspension 模式
2010-11-10 23:48 1135考虑这么一个伺服器,它可以处理来自多个客户端的服务请求(Req ... -
Design Pattern: Observer 模式
2010-11-10 23:33 1039Java深入到一定程度,就不可避免的碰到设计模式(design ... -
Design Pattern: Iterator 模式
2010-11-10 23:22 1093这个模式已经被整合入Java的Collection.在大多数场 ... -
Design Pattern: Interpreter 模式
2010-11-10 23:17 1278对于一个具有层次节点关系的问题来说,如果您要剖析每一个节点,您 ... -
Design Pattern: Command 模式
2010-11-10 23:08 1349Command定义n 将来自客户端的请求传入一个对象,无需了解 ... -
Design Pattern: Chain of Responsibility 模式
2010-11-10 23:00 1260其实Chain of Responsibility ... -
Design Pattern: Proxy 模式
2010-11-10 22:51 1600来看看实现代理的两种方式:Static Proxy与Dynam ... -
Design Pattern: Flyweight 模式
2010-11-10 22:48 1408Flyweight(享元)模式定义:避免大量拥有相同内容的小类 ... -
Design Pattern: Facade 模式
2010-11-10 22:42 1315Facade模式的定义: 为子系统中的一组接口提供一个一致的界 ... -
Design Pattern: Decorator 模式
2010-11-10 22:35 1348装饰模式:Decorator常被翻译成"装饰&quo ... -
Design Pattern: Bridge 模式
2010-11-10 22:24 1155Bridge模式定义 :将抽象 ... -
Design Pattern: Default Adapter 模式(二)
2010-11-10 22:16 1528适配器模式定义:将两个 ... -
Design Pattern: Default Adapter 模式
2010-11-10 22:07 1125在Java中如果要定义事件 ...
相关推荐
"DesignPattern:C#设计模式示例"这个资源很可能是包含多个C#实现的设计模式示例代码库。 设计模式通常分为三类:创建型、结构型和行为型。每种模式都解决了特定场景下的问题,并提供了良好的代码组织和扩展性。 ...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm”供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) 生成...
本资源“DesignPattern::pencil:设计模式_java实现以及详解”提供了一套详细的学习材料,帮助开发者理解和应用设计模式。 该资源的作者是“养码青年-Style”,他通过这个项目记录了自己的设计模式学习过程。鼓励...
pattern.p002.abstractfactory : 抽象工厂模式。 pattern.p003.singletonEH : 单例模式(饿汉式)。 pattern.p003.singletonLH : 单例模式(懒汉式)。 pattern.p003.singletonNew : 单例模式(完美解决方案)。 ...
设计模式是软件工程中的一种最佳实践,用于解决在软件设计中常见的...以上就是这个DesignPattern小Demo中可能会涵盖的设计模式,通过这些模式的实例,你可以更好地理解和应用它们到实际项目中,提升你的Java编程能力。
在这个“DesignPattern”仓库中,可能包含了对各种设计模式的详细解释、示例和应用。 设计模式分为三大类:创建型、结构型和行为型模式。创建型模式主要关注对象的创建过程,如单例模式(Singleton)、工厂模式...
本教程的"designpattern-master"可能包含以上各种设计模式的实例代码和详细解释,帮助学习者通过实践掌握这些模式。在实际项目中,灵活运用这些设计模式可以提高代码质量,使项目更加健壮和易于维护。对于PHP开发者...
DesignPattern-master这个压缩包可能包含了一个关于设计模式的项目或者教程资源。 设计模式分为三类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)...
1. 创建型模式:这类模式涉及到对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。这些模式提供了创建对象...
接着,工厂模式(Factory Method)用于创建对象,它提供了一个接口来创建对象,但让子类决定实例化哪一个类。Java中的抽象工厂类可能如下所示: ```java public abstract class ShapeFactory { public abstract ...
在`Head_First_DesignPattern_src`中,你可以找到`AbstractFactory`、`Product`和`ConcreteProduct`类,它们展示了简单工厂和抽象工厂模式的应用。 3. 观察者模式(Observer): 观察者模式定义了对象之间的一对多...
"designPattern:设计模式相关代码实现"这个项目,显然提供了不同设计模式在Java语言中的实际应用示例。 在Java世界里,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。每种模式都针对特定的编程问题...
AbstractFactory factory_a = {create_a_type_a, create_b_type_a}; ``` **2.4 访问者模式** 访问者模式允许在不修改类结构的情况下添加新操作。在C中,可以通过传递函数指针来实现这一模式。 ```c typedef struct...
- 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者模式(Builder):将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 - 原型...
这个名为"DesignPattern"的压缩包文件很可能包含了一个Java实现的各种设计模式的示例程序。 在这个"DesignPattern-master"目录中,我们可以期待找到一系列与设计模式相关的Java源代码文件(.java),每个文件或...
本资源"DesignPattern:设计模式.net源代码"提供了一套基于.NET实现的设计模式示例,旨在帮助程序员更好地理解和应用这些模式。 在"DesignPattern-master"这个压缩包中,你可能找到的文件结构和内容包括: 1. **...
2. 抽象工厂模式(Abstract Factory Pattern):提供一个接口用于创建相关或依赖对象的家族,无需指定具体类。它允许客户端使用抽象的接口来创建一组相关或相互依赖的对象。实现部分详细介绍了抽象工厂模式的结构和...
创建型模式关注对象的创建,如单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。这些模式帮助我们控制实例化过程,使代码更具灵活性和可扩展性。 结构型模式涉及到如何组合类和对象...