抽象工厂模式

定义

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

在该模式中,每一个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品。,这些产品构成一个产品族。

角色

AbstractFactory(抽象工厂)

声明一组用于创建一类产品的方法,每一个方法对应一种产品。

public interface AbstractFactoty {
    Button createButton();
    TextField createTextField();
}
复制代码

ConcreteFactory(具体工厂)

实现抽象工厂中的方法,生成一组具体产品,这些产品构成了一个产品族。

public class BlueConcreteFactory implements AbstractFactoty {
    @Override
    public Button createButton() {
        return new BlueButton();
    }

    @Override
    public TextField createTextField() {
        return new BlueTextField();
    }
}
复制代码
public class GreenConcreteFactory implements AbstractFactoty {
    @Override
    public Button createButton() {
        return new GreenButton();
    }

    @Override
    public TextField createTextField() {
        return new GreenTextField();
    }
}
复制代码

AbstractProduct(抽象产品)

声明每种产品所具有的业务方法。

public interface Button {
    void display();
}
复制代码
public interface TextField {
    void displayTextField();
}
复制代码

ConcreteProduct(具体产品)

实现抽象产品中的业务方法。

public class BlueButton implements Button {
    @Override
    public void display() {
        System.out.println("我是蓝色按钮");
    }
}
复制代码
public class BlueTextField implements TextField {
    @Override
    public void displayTextField() {
        System.out.println("我是蓝色文本框");
    }
}
复制代码
public class GreenButton implements Button {
    @Override
    public void display() {
        System.out.println("我是绿色按钮");
    }
}
复制代码
public class GreenTextField implements TextField {
    @Override
    public void displayTextField() {
        System.out.println("我是绿色文本框");
    }
}
复制代码

客户类

public class AbstractFactoryClient {
    public static void main(String[] args) {
        AbstractFactoty abstractFactoty;
        Button button;
        TextField textField;
        abstractFactoty = new BlueConcreteFactory();
        button = abstractFactoty.createButton();
        textField = abstractFactoty.createTextField();
        button.display();
        textField.displayTextField();
    }
}
复制代码

测试结果:

我是蓝色按钮
我是蓝色文本框
复制代码

缺点

修改产品等级结构,(譬如实例中增加其他组件等)对整体代码的修改量较大。

适用场景

(1)系统对其依赖的产品的细节不注重。

(2)系统中有多于一个的产品族。

(3)产品等级结构稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值