(创建模式)抽象工厂abstract factory

来源:互联网 发布:mac book屏保aerial 编辑:程序博客网 时间:2024/06/06 18:15

1:抽象工厂概述

(1)抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。
(2)
抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。
(3)
抽象工厂模式可以向客户端提供一个接口,使用客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

2:工厂模式与抽象工厂

(1)当有多个抽象产品角色时,工厂方法模式已经不能满足要求。

(2)每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结果。
根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。
当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。。
3
:抽象工厂特点

通过引进抽象工厂模式,可以处理具有相同(或者相似)等级结构的多个产品族中的产品对象的创建问题。

由于每个具体工厂角色都需要负责两个不同等级结构的产品对象的创建,因此每个工厂角色都需要提供两个工厂方法,分别用于创建两个等级结构的产品。既然每个具体工厂角色都需要实现这两个工厂方法,所以具有一般性,不妨抽象出来,移动到抽象工厂角色中加以声明。
4
:抽象工厂举例

抽象产品角色:
public interface Creator
{
    public ProductA factoryA();

public ProductB factoryB();
}
具体工厂类1

public class ConcreteCreator1 implements Creator
{
    public ProductA factoryA()
    {
        return new ProductA1();
    }

    public ProductB factoryB()
    {
        return new ProductB1();
    }
}
具体工厂类2

public class ConcreteCreator2 implements Creator
{
    public ProductA factoryA()
    {
        return new ProductA1();
    }

    public ProductB factoryB()
    {
        return new ProductB1();
    }
}
一般而言,有多少个产品等级结构,就会在工厂角色中发现多少个工厂方法。每一个产品等级结构中有多少个具体的产品,就有多少个产品族,也就会在工厂等级结构中发现多少个具体工厂。

抽象产品类A
public interface ProductA
{
}
抽象产品类B
public interface ProductB
{
}
具体产品类ProdcutA1:
public class ProductA1 implements ProductA
{
    public ProductA1()
    {
    }
}
具体产品类
ProdcutA2:
public class ProductA2 implements ProductA
{
    public ProductA2()
    {
    }
}
具体产品类
ProdcutB1:
public class ProductB1 implements ProductB
{
    public ProductB1()
    {
    }
}
具体产品类
ProdcutB2:
public class ProductB2 implements ProductB
{
    public ProductB2()
    {
    }
}

原创粉丝点击