`

Design Pattern: Abstract Factory 模式

 
阅读更多
在Abstract Factory模式中将具体的Product封装在具体Factory实现中,而客户仍只要面对Factory与Product的抽象介面,避免依赖于具体的Factory与Product,由于Factory封装了所必须的Product,所以要更换掉所有的元件,只要简单的抽换掉Factory就可以了,不用修改客户端的程式。

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();    
}}
  • 大小: 26.9 KB
分享到:
评论

相关推荐

    DesignPattern:C#设计模式示例

    "DesignPattern:C#设计模式示例"这个资源很可能是包含多个C#实现的设计模式示例代码库。 设计模式通常分为三类:创建型、结构型和行为型。每种模式都解决了特定场景下的问题,并提供了良好的代码组织和扩展性。 ...

    C++设计模式(Design Pattern)范例源代码

    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm”供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) 生成...

    DesignPattern::pencil:设计模式_java实现以及详解

    本资源“DesignPattern::pencil:设计模式_java实现以及详解”提供了一套详细的学习材料,帮助开发者理解和应用设计模式。 该资源的作者是“养码青年-Style”,他通过这个项目记录了自己的设计模式学习过程。鼓励...

    designpattern:java的设计模式

    pattern.p002.abstractfactory : 抽象工厂模式。 pattern.p003.singletonEH : 单例模式(饿汉式)。 pattern.p003.singletonLH : 单例模式(懒汉式)。 pattern.p003.singletonNew : 单例模式(完美解决方案)。 ...

    DesignPattern:设计模式小Demo

    设计模式是软件工程中的一种最佳实践,用于解决在软件设计中常见的...以上就是这个DesignPattern小Demo中可能会涵盖的设计模式,通过这些模式的实例,你可以更好地理解和应用它们到实际项目中,提升你的Java编程能力。

    DesignPattern:关于设计模式

    在这个“DesignPattern”仓库中,可能包含了对各种设计模式的详细解释、示例和应用。 设计模式分为三大类:创建型、结构型和行为型模式。创建型模式主要关注对象的创建过程,如单例模式(Singleton)、工厂模式...

    designpattern:PHP设计模式教程

    本教程的"designpattern-master"可能包含以上各种设计模式的实例代码和详细解释,帮助学习者通过实践掌握这些模式。在实际项目中,灵活运用这些设计模式可以提高代码质量,使项目更加健壮和易于维护。对于PHP开发者...

    DesignPattern:设计模式

    DesignPattern-master这个压缩包可能包含了一个关于设计模式的项目或者教程资源。 设计模式分为三类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)...

    设计模式java源码-design-pattern:java设计模式源代码

    1. 创建型模式:这类模式涉及到对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。这些模式提供了创建对象...

    designpattern:Head First 设计模式练习

    接着,工厂模式(Factory Method)用于创建对象,它提供了一个接口来创建对象,但让子类决定实例化哪一个类。Java中的抽象工厂类可能如下所示: ```java public abstract class ShapeFactory { public abstract ...

    设计模式源码Head_First_DesignPattern_src

    在`Head_First_DesignPattern_src`中,你可以找到`AbstractFactory`、`Product`和`ConcreteProduct`类,它们展示了简单工厂和抽象工厂模式的应用。 3. 观察者模式(Observer): 观察者模式定义了对象之间的一对多...

    designPattern:设计模式相关代码实现

    "designPattern:设计模式相关代码实现"这个项目,显然提供了不同设计模式在Java语言中的实际应用示例。 在Java世界里,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。每种模式都针对特定的编程问题...

    design-pattern:标准设计模式的实施

    - 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者模式(Builder):将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 - 原型...

    DesignPattern:设计模式演示程序

    这个名为"DesignPattern"的压缩包文件很可能包含了一个Java实现的各种设计模式的示例程序。 在这个"DesignPattern-master"目录中,我们可以期待找到一系列与设计模式相关的Java源代码文件(.java),每个文件或...

    DesignPattern:设计模式.net源代码

    本资源"DesignPattern:设计模式.net源代码"提供了一套基于.NET实现的设计模式示例,旨在帮助程序员更好地理解和应用这些模式。 在"DesignPattern-master"这个压缩包中,你可能找到的文件结构和内容包括: 1. **...

    design pattern tutorial

    2. 抽象工厂模式(Abstract Factory Pattern):提供一个接口用于创建相关或依赖对象的家族,无需指定具体类。它允许客户端使用抽象的接口来创建一组相关或相互依赖的对象。实现部分详细介绍了抽象工厂模式的结构和...

    JAVA design pattern-java设计模式

    创建型模式关注对象的创建,如单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。这些模式帮助我们控制实例化过程,使代码更具灵活性和可扩展性。 结构型模式涉及到如何组合类和对象...

    Design Pattern英文版

    - 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者模式(Builder):将复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示。 - 对象...

Global site tag (gtag.js) - Google Analytics