转自:http://blog.csdn.net/zigzagsoft/article/details/2613028
Abstract Factory模式定义了如何实例化一组对象系列,这些对象可能相关可能互为利用。客户在创建的时候无须指定这些对象属于什么类型,它只需关注是谁生产的。具体生产出来的一系列对象的细节和类别则由某个工厂负责。
使用范围
- 系统需要独立于组成它的对象系列的创建、组织和表现的时候
- 需要组合一系列的对象,这些对象作为整体作用于一个系统的时候
使用方法
考察抽象工厂的类图
AbstractFactory类是一个系统的抽象,称之为工厂,该工厂可能多个包含细节的子类。每个工厂都必须生产同一个系列的产品组,这里为AbstractProductA和AbstractProductB。然而,每一个工厂的系列产品又有不同的实现方法或表现方法。因此ConcreteFactory1生产ProductA1和ProductA1,ConcreteFactory2生产ProductA2和ProductB2。
举例说明
假设我们要在一个应用程序中创建一个Button和一个Textbox。对于不同的系统可能创建不一样的这两个对象,Linux下的和Windows环境下的。
public abstract class Button { protected abstract void createShape(); } public abstract class Textbox { protected abstract void createText(); }
在Linux环境下创建Button和Textbox的实现细节
public class LinuxButton extends Button{ protected void createShape() { System.out.println("create Linux Button"); } } public class LinuxTextbox extends Textbox{ protected void createText() { System.out.println("create linux textbox"); } }
在Windows环境下创建Button和Textbox的实现细节
public class WindowsButton extends Button{ protected void createShape() { System.out.println("create windows button"); } } public class WindowsTextbox extends Textbox{ protected void createText() { System.out.println("create windows textbox"); } }
这里是一个抽象工厂类,需要完成创建Button和Textbox的方法
public abstract class Factory { Button button; Textbox textbox; public abstract void createButton(); public abstract void createTextbox(); }
Linux下的工厂角色
public class LinuxFactory extends Factory{ public void createButton() { button = new LinuxButton(); button.createShape(); } public void createTextbox() { textbox = new LinuxTextbox(); textbox.createText(); } }
Windows下的工厂角色
public class WindowsFactory extends Factory{ public void createButton() { button = new WindowsButton(); button.createShape(); } public void createTextbox() { textbox = new WindowsTextbox(); textbox.createText(); } }
到此为止,一个抽象工厂模式创建完毕。类结构图如下:
客户端的使用方法为:
public class Client { public static void main(String args[]){ Factory factory = new LinuxFactory(); factory.createButton(); factory.createTextbox(); factory = new WindowsFactory(); factory.createButton(); factory.createTextbox(); } }
相关推荐
Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
3、抽象工厂模式(Abstract Factory Pattern) 用意:一个工厂生产一系列产品
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) 体验课程
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) (Level 300)
在前一节,我们介绍了Strategy模式,并使用此模式实现了一个根据角色的职业来分配技能的范例(实际也就是动态地为类分配方法)。...本文将讨论如何使用GOF的Abstract Factory抽象工厂来实现这样的角色外形设计。
设计模式C++学习之抽象工厂模式(AbstractFactory)
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
设计模式 抽象工厂 Abstract Factory 抽象工厂模式
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式),.net常用设计模式。
AbstractFactory.rar qq:292258449
NULL 博文链接:https://chaimzane.iteye.com/blog/337094
分层架构设计支持SQLServer+Oracle|WebUI+WinUI 抽象工厂(Abstract Factory)应用案例
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
对设计模式—Abstract Factory模式的认识
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码
8 public override AbstractFactory.AbstractCoat CreateCoat() 9 { 10 return new CoatA(); 11 } 12 13 public override AbstractTrousers CreateTrousers() 14 { 15 return new TrousersA(); 16 } 17 } 18 19 /*...
C++设计模式课件9_Abstract Factory_抽象工厂.pdf