设计模式3-抽象工厂模式

定义:

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

通用类图:


通用源码类图:


抽象产品A类:

public abstract class AbstractProductA {
    /**共有方法*/
    public void shareMethod(){

    }

    //每个产品有各自的实现
    public abstract void doSomething();
}

产品A1实现类

public class ProductA1 extends AbstractProductA {
    @Override
    public void doSomething() {
        System.out.println("产品A1的实现方法");
    }
}

产品A2实现类:

public class ProductA2 extends AbstractProductA {
    @Override
    public void doSomething() {
        System.out.println("产品A2的实现方法");
    }
}

B与A类似,不在赘述

抽象工厂类:

public abstract class AbstractCreator {

    //创建A产品家族
    public abstract AbstractProductA createProductA();

    //创建B产品家族
    public abstract AbstractProductB createProductB();
}

产品等级1的实现类:

public class Creator1 extends AbstractCreator {
    @Override
    public AbstractProductA createProductA() {
        return new ProductA1();
    }
    @Override
    public AbstractProductB createProductB() {
        return new ProductB1();
    }
}

产品等级2的实现类:

public class Creator2 extends AbstractCreator {
    @Override
    public AbstractProductA createProductA() {
        return new ProductA2();
    }
    @Override
    public AbstractProductB createProductB() {
        return new ProductB2();
    }
}

场景类:

public class Client {
    public static void main(String[] args) {
        //定义两个工厂
        AbstractCreator creator1 = new Creator1();
        AbstractCreator creator2 = new Creator2();

        AbstractProductA a1 = creator1.createProductA();
        AbstractProductA a2 = creator2.createProductA();

        AbstractProductB b1 = creator1.createProductB();
        AbstractProductB b2 = creator2.createProductB();

        a1.doSomething();
        a2.doSomething();
        b1.doSomething();
        b2.doSomething();
    }

女娲造人,加上性别的区分,类图:


抽象工厂模式的优点:

(1)封装性,高层模块不关心具体实现,只关心接口。工厂类来负责具体的实现逻辑。

(2)产品族内的约束为非公开状态。

抽象工厂模式的缺点:

产品族扩展非常困难

使用场景:

一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。

最佳实践:

抽象工厂模式是一个简单的模式,使用的场景非常多,大家在软件产品开发过程中,涉及不同操作系统的时候,都可以考虑使用抽象工厂模式。

猜你喜欢

转载自blog.csdn.net/sinat_27143551/article/details/80183860
今日推荐