抽象工厂模式

来源:互联网 发布:域名主机系统 编辑:程序博客网 时间:2024/06/06 13:07

抽象工厂模式

抽象工厂模式是创建模式,是工厂方法模式进一步的推广。
抽象工厂模式向客户端提供一个接口,客户端可以不需要指定创建产品的具体类型创建多个产品族的对象。

结构与角色

这里写图片描述

涉及到角色:

  1. 抽象工厂角色(Creator)
    这个角色是工厂方法模式的核心,任何创建产品对象的工厂类都必须实现这个接口。在实际的系统中这个角色也可以是一个java的抽象类。
  2. 具体工厂角色(Concrete Creator)
    这个角色是实现了抽象工厂接口的java类,含有与应用密切相关的逻辑,并且受到应用程序的调用创建产品。
  3. 抽象产品角色(Product)
    工厂方法模式创建产品对象的超类,也是产品对象共同的父类或共同的接口。实际系统中这个对象常常用java抽象类实现
  4. 具体产品角色(Concrete Product)
    这个角色实现了抽象产品角色定义的接口,工厂方法模式创建的每一个对象都是某个具体产品实例。

实现

1.抽象工厂角色(Creator)
抽象工厂角色提供两个工厂方法,以创建两个不同产品族对象

public interface Factory{// 产品族A的工厂方法public ProductA factoryA();// 产品族B的工厂方法public ProductB factoryB();}

2.抽象产品角色(Product)
两个产品族抽象对象

public interface ProductA{ }public interface ProductB{}

3.具体产品角色(Concrete Product)
每个产品族有两个具体产品

public class ProductA1 implements ProductA{public ProductA1(){System.out.println("生成产品a1");}}public class ProductA2 implements ProductA{public ProductA2(){System.out.println("生成产品a2");}}public class ProductB1 implements ProductB{public ProductB1(){System.out.println("生产产品b1");}}public class ProductB2 implements ProductB{public ProductB2(){System.out.println("生产产品b2");}}

4.具体工厂角色(Concrete Creator)

public class ConcreteFactory1 implements Factory{@Overridepublic ProductA factoryA(){return new ProductA1();}@Overridepublic ProductB factoryB(){return new ProductB1();}}public class ConcreteFactory2 implements Factory{@Overridepublic ProductA factoryA(){return new ProductA2();}@Overridepublic ProductB factoryB(){return new ProductB2();}}

5.客户端

public class Client{public static void main(String[] args){Factory concreteFactory1 = new ConcreteFactory1();Factory concreteFactory2 = new ConcreteFactory2();concreteFactory1.factoryA();concreteFactory2.factoryA();concreteFactory1.factoryB();concreteFactory2.factoryB();}}

例子中有两个抽象产品,所以工厂角色中提供了两个工厂方法。有多少抽象产品,就有多少工厂方法。增加新的抽象产品需要修改每一个工厂角色。
抽象产品数目不变,增加新的产品只需要增加新的工厂就可以。

原创粉丝点击