抽象工厂模式

抽象工厂模式

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

结构与角色

这里写图片描述

涉及到角色:

  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
{

@Override
public ProductA factoryA()
{
return new ProductA1();
}

@Override
public ProductB factoryB()
{
return new ProductB1();
}

}

public class ConcreteFactory2 implements Factory
{

@Override
public ProductA factoryA()
{
return new ProductA2();
}

@Override
public 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();
}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值