- 浏览: 87463 次
- 性别:
- 来自: 龙城
最新评论
-
Fis:
阿呆jinsss 写道 楼主说的简单易懂,最适合我这些理解能力 ...
[原创]AS3.0的自定义事件 -
阿呆jinsss:
楼主说的简单易懂,最适合我这些理解能力差点的人,谢谢了~
[原创]AS3.0的自定义事件 -
Fis:
mengxiaolongcz 写道外层循环 i<arr. ...
去除数组中相同的元素 -
Fis:
mengxiaolongcz 写道外层循环 i<arr. ...
去除数组中相同的元素 -
mengxiaolongcz:
外层循环 i<arr.length-1
里层循环 var ...
去除数组中相同的元素
假设您要制作一个对话方块(Dialog)元件,您希望的是这个对话方块可以有不同的视感(Look-and- feel),最基本的想法是,藉由Setter将不同视感的元件设定给这个对话方块,例如:
CustomDialog.java
很简单,这是最基本的介面依赖,Setter依赖于IButton与ITextField两个介面,而不是其实作类别,不过这边还有个进一步的要求,使用上面的方式还必须亲自呼叫Setter、layout等方法,您希望视感的更换可以更简单些,例如只要透一个元件的替换就可以完成对话方块上所有元件的视感更换。
您可以使用Abstract Factory模式,将所有对话方块所需要的产生的元件加以封装,对话方块依赖于Abstract Factory,实际上具体的Factory实现则分别产生对话方块所需要的视感元件,下面的 UML 类别图展现这种概念。
abstractFactory-1.jpg
现在如果要更换所有的视感元件,就只要抽象掉具体的Factory就可以了,例如:
CustomDialog windowsDialog =
new CustomDialog(new WindowsWidgetFactory());
windowsDialog.showDialog();
CustomDialog macDialog =
new CustomDialog(new MacWidgetFactory());
macDialog.showDialog();
来将上面的UML图具体实现出来。
CustomDialog.java
IButton.java
ITextField.java
IWidgetFactory.java
MacButton.java
WindowsButton.java
MacTextField.java
WindowsTextField.java
MacWidgetFactory.java
WindowsWidgetFactory.java
下图是Abstract Factory模式的UML结构图:
abstractFactory-2.jpg
简单的说,在Abstract Factory模式中将具体的Product封装在具体Factory实现中,而客户仍只要面对Factory与Product的抽象介面,避免依赖于具体的Factory与Product,由于Factory封装了所必须的Product,所以要更换掉所有的元件,只要简单的抽换掉Factory就可以了,不用修改客户端的程式。
我的小结:Abstract Factory抽象工厂模式的用法是把窗体的具体部件和窗体分离开了,中间加入了工厂类,通过不同的工厂类来实现不改变窗体代码的情况下修改窗体的显示,只需设置不同的工厂类对象即可。
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 类别图展现这种概念。
abstractFactory-1.jpg
现在如果要更换所有的视感元件,就只要抽象掉具体的Factory就可以了,例如:
CustomDialog windowsDialog =
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模式的UML结构图:
abstractFactory-2.jpg
简单的说,在Abstract Factory模式中将具体的Product封装在具体Factory实现中,而客户仍只要面对Factory与Product的抽象介面,避免依赖于具体的Factory与Product,由于Factory封装了所必须的Product,所以要更换掉所有的元件,只要简单的抽换掉Factory就可以了,不用修改客户端的程式。
我的小结:Abstract Factory抽象工厂模式的用法是把窗体的具体部件和窗体分离开了,中间加入了工厂类,通过不同的工厂类来实现不改变窗体代码的情况下修改窗体的显示,只需设置不同的工厂类对象即可。
发表评论
-
我的开发成长日记(1)
2020-02-05 18:11 02018年是个特别的年 ... -
VR开发中用到的技术总结
2017-12-11 14:32 0使用Unity3D开发VR应用有2年了,刚刚接触都朋友和同 ... -
LayaBox flash 转换项目心得
2015-08-28 13:50 4438一、熟悉从as3项目转到js的API和特性差异 1、Simpl ... -
Starling中AssetManager加载文件的流程整理
2015-06-16 20:15 1362Starling做移动开发,会用到大量的纹理和图片素材、X ... -
LayaBox flash 转换项目心得
2015-08-28 13:46 0一、熟悉从as3项目转到j ... -
金武传
2012-12-08 19:28 0丐帮: 萧峰,远,擒龙功,降魔掌,打狗棒法,降龙十八掌* 洪七 ... -
SWFLoader不响应Event.COMPLETE事件
2012-06-25 16:16 1218工作中遇到了一个问题,flex控件SWFLoader解决了 ... -
PHP中的生成XML文件的4种方法
2012-05-02 14:07 1047原文:http://www.oschina.net/code/ ... -
AS3 位运算
2012-04-17 13:04 917原文转至http://www.tangpei.net/2011 ... -
支持参数的事件处理函数
2012-04-11 14:44 3通常情况下,我们使用事件机制时,编写的事件处理函数只需要一 ... -
关于as3运动效果的总结
2012-03-22 18:18 1042看了《ActionScript3.0高级动画教程》一书,用 ... -
ActionScript3高级动画教程笔记
2012-03-14 17:09 8002012.3.14 基本三角函数的计算: 角的正弦值 = ... -
Design Pattern: Adapter 模式 - Class Adapter
2012-03-09 10:42 706Adapter模式的另一种 ... -
Design Pattern: Adapter 模式 - Object Adapter
2012-03-08 16:00 671您的电脑是个旧电脑,新的滑鼠都在使用USB接口了,而您的电 ... -
Design Pattern: Default Adapter 模式
2012-03-08 15:12 990在Java中如果要定义事件处理的方式,必须实作EventL ... -
Design Pattern: Registry of Singleton 模式
2012-03-08 14:23 812考虑使用 Singleton 模式 时拥有子类别的问题,在 ... -
Design Pattern: Singleton 模式
2012-03-08 11:55 824Singleton的英文意义 ... -
Design Pattern: Prototype 模式
2012-03-08 11:13 927您从图书馆的期刊从发现了几篇您感兴趣的文章,由于这是图书馆 ... -
Design Pattern: Factory Method 模式
2012-03-07 20:04 758考虑一个状况,您 ... -
Design Pattern: Builder 模式
2012-03-07 19:26 785您想要建立一个迷宫产生程式,迷宫使用二维阵列来定义,0表示 ...
相关推荐
"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世界里,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。每种模式都针对特定的编程问题...
- 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者模式(Builder):将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 - 原型...
这个名为"DesignPattern"的压缩包文件很可能包含了一个Java实现的各种设计模式的示例程序。 在这个"DesignPattern-master"目录中,我们可以期待找到一系列与设计模式相关的Java源代码文件(.java),每个文件或...
本资源"DesignPattern:设计模式.net源代码"提供了一套基于.NET实现的设计模式示例,旨在帮助程序员更好地理解和应用这些模式。 在"DesignPattern-master"这个压缩包中,你可能找到的文件结构和内容包括: 1. **...
2. 抽象工厂模式(Abstract Factory Pattern):提供一个接口用于创建相关或依赖对象的家族,无需指定具体类。它允许客户端使用抽象的接口来创建一组相关或相互依赖的对象。实现部分详细介绍了抽象工厂模式的结构和...
创建型模式关注对象的创建,如单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。这些模式帮助我们控制实例化过程,使代码更具灵活性和可扩展性。 结构型模式涉及到如何组合类和对象...
- 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者模式(Builder):将复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示。 - 对象...