抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

先看一下工厂模式

1. 工厂模式

image.png

public class FactoryPattern {
    public static void main(String[] args) {
        Factory factory = new HuaWeiFactory();
        Phone phone = factory.createPhone();
        phone.print();
    }
}

interface Phone {
    void print();
}

class iPhone implements Phone {

    @Override
    public void print() {
        System.out.print("iPhone");
    }
}

class HuaWeiPhone implements Phone {

    @Override
    public void print() {
        System.out.print("HuaWeiPhone");
    }
}

interface Factory {
    Phone createPhone();
}

class IPhoneFactory implements Factory {

    @Override
    public Phone createPhone() {
        return new iPhone();
    }
}

class HuaWeiFactory implements Factory {

    @Override
    public Phone createPhone() {
        return new HuaWeiPhone();
    }
}
复制代码

2. 抽象工厂模式

抽象工厂模式只是工厂模式的一个扩展,抽象工厂模式如果只有一个产品体系就会退化成工厂模式

image.png

image.png

public class AbstractFactoryPattern {
    public static void main(String[] args) {
        SuperFactory factory = new SuperFactory();
        Phone phone = factory.createPhone("1");
        phone.print();
    }
}

interface Phone {
    void print();
}

class iPhone implements Phone {

    @Override
    public void print() {
        System.out.print("iPhone");
    }
}

class HuaWeiPhone implements Phone {

    @Override
    public void print() {
        System.out.print("HuaWeiPhone");
    }
}

interface Mask {
    void print();
}

class N95 implements Mask {

    @Override
    public void print() {
        System.out.print("N95");
    }
}

class KN95 implements Mask {

    @Override
    public void print() {
        System.out.print("KN95");
    }
}

interface AbstractFactory {
    Phone createPhone(String param);
    Mask createMask(String param);
}

class SuperFactory implements AbstractFactory {

    @Override
    public Phone createPhone(String param) {
        return new iPhone();
    }

    @Override
    public Mask createMask(String param) {
        return new N95();
    }
}

复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享