前期概念

产品等级结构:产品的继承结构,例如一个抽象类(或接口类)是电视机,其子类(或实现类)是海尔电视机/海信电视机、TCL电视机,则抽象电视机和某一具体品牌电视机之间构成了一个产品等级结构,抽象电视机是父类(或接口),具体品牌电视机是子类(或实现类)
产品族:在抽象工厂模式中,产品族指的是由同一个工厂生产的,位于不同产品等级结构的一组产品,例如海尔电器厂生产的海尔电视机、海尔电冰箱等构成一个产品族。


定义

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。它是一种对象创建型模式。
它为创建一组对象提供了一种解决方案,与工厂方法模式相比,抽象工厂中的具体工厂不只是创建一种产品,它负责创建一族产品。


UML示例

抽象工厂方法


代码示例

按钮产品结构

// 按钮接口
public interface Button {
    public void display();
}

// spring 按钮类:具体产品
public class SpringButton implements Button{
    public void display() {
        System.out.println("显示浅绿色按钮");
    }
}

// Summer 按钮类:具体产品
public class SummerButton implements Button{
    public void display() {
        System.out.println("显示浅蓝色按钮");
    }
}

文本框产品结构

// 文本框接口:抽象产品
public interface TextField {
    public void display();
}

// Spring文本框类:具体产品
public class SpringTextField implements TextField{
    public void display() {
        System.out.println("显示绿色文本框");
    }
}

// Summer 文本框类:具体产品
public class SummerTextField implements TextField{
    public void display() {
        System.out.println("显示蓝色文本框");
    }
}

组合框产品结构

// 组合框接口:抽象产品
public interface ComboBox {
    public void display();
}

// Spring 组合框类:具体产品
public class SpringComBox implements ComboBox{
    public void display() {
        System.out.println("显示绿色组合框");
    }
}

// Summer组合框类:具体产品
public class SummerComboBox implements ComboBox{
    public void display() {
        System.out.println("显示蓝色组合框");
    }
}

皮肤工厂

// 界面皮肤工厂接口:抽象工厂
public interface SkinFactory {
    public Button createButton();
    public TextField createTextField();
    public ComboBox createComboBox();
}


// Spring皮肤工厂:具体工厂
public class SpringSkinFactory implements SkinFactory{
    public Button createButton() {
        return new SpringButton();
    }

    public TextField createTextField() {
        return new SpringTextField();
    }

    public ComboBox createComboBox() {
        return new SpringComBox();
    }
}

// Summer皮肤工厂:具体工厂
public class SummerSkinFactory implements SkinFactory{
    public Button createButton() {
        return new SummerButton();
    }

    public TextField createTextField() {
        return new SummerTextField();
    }

    public ComboBox createComboBox() {
        return new SummerComboBox();
    }
}

客户端

// 客户端代码
public class SkinClient {
    public static void main(String[] args) {
        SkinFactory factory;
        Button bt;
        TextField tf;
        ComboBox cb;
       
        factory = new SummerSkinFactory;
        bt = factory.createButton();
        tf = factory.createTextField();
        cb = factory.createComboBox();

        bt.display();
        tf.display();
        cb.display();
    }
}

输出:

显示浅蓝色按钮
显示蓝色文本框
显示蓝色组合框
最后修改:2020 年 05 月 21 日
如果觉得我的文章对你有用,请随意赞赏