|
AbstractFactory抽像工厂 |
|
|
作者: 发布时间:2008-07-18 10:12:01 来源:育路计算机考试频道 |
|
|
模式定义 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(); 【责编:冷客 纠错】 育路网 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
课程咨询热线:010-51268840 51268841 |
|
|
|
| | |