创建型设计模式——抽象工厂模式


一、简介

在这里插入图片描述
工厂模式的本质都是将具体产品在应用层的代码隔离
在应用层创建时无需关心创建的细节(如参数等)


二、抽象工厂模式

1.抽象工厂模式和工厂方法模式的区别

抽象工厂模式要解决的问题比较复杂,不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建,因此,这个抽象工厂会对应到多个实际工厂,类
似于一个超级工程,而每个实际工厂则负责创建多个实际的产品。

这种模式类似于多个供应商提供一系列类型的产品

2.例子(华为和苹果供应商提供一系列类型的产品)

手机产品接口和实现类

public interface PhoneProduct {
    void bootup();//开机功能
    void shutdown();//关机功能
    void phonecall();//打电话功能
}
class ApplePhoneProduct implements PhoneProduct{
    @Override
    public void bootup() {
        System.out.println("苹果手机开机啦");
    }
    @Override
    public void shutdown() {
        System.out.println("苹果手机关机啦");
    }
    @Override
    public void phonecall() {
        System.out.println("苹果手机打电话啦");
    }
}
class HuaweiPhoneProduct implements PhoneProduct{
    @Override
    public void bootup() {
        System.out.println("华为手机开机啦");
    }
    @Override
    public void shutdown() {
        System.out.println("华为手机关机啦");
    }
    @Override
    public void phonecall() {
        System.out.println("华为手机打电话啦");
    }
}

平板产品接口和实现类

public interface PadProduct {
    void bootup();//开机功能
    void shutdown();//关机功能
    void pencil();//手写笔功能
}
class ApplePadProduct implements PadProduct{
    @Override
    public void bootup() {
        System.out.println("苹果平板开机啦");
    }
    @Override
    public void shutdown() {
        System.out.println("苹果平板关机啦");
    }
    @Override
    public void pencil() {
        System.out.println("苹果平板能用手写笔啦");
    }
}
class HuaweiPadProduct implements PadProduct{
    @Override
    public void bootup() {
        System.out.println("华为平板开机啦");
    }
    @Override
    public void shutdown() {
        System.out.println("华为平板关机啦");
    }
    @Override
    public void pencil() {
        System.out.println("华为平板能用手写笔啦");
    }
}

抽象工厂接口和实现类

public interface AbstractFactory {
    PadProduct PadProduct();//工厂要有平板生产线
    PhoneProduct PhoneProduct();//工厂要有手机生产线
}
class AppleFactory implements AbstractFactory{
    @Override
    public PadProduct PadProduct() {
        return new ApplePadProduct();
    }
    @Override
    public PhoneProduct PhoneProduct() {
        return new ApplePhoneProduct();
    }
}
class HuaweiFactory implements AbstractFactory{
    @Override
    public PadProduct PadProduct() {
        return new HuaweiPadProduct();
    }
    @Override
    public PhoneProduct PhoneProduct() {
        return new HuaweiPhoneProduct();
    }
}

消费者根据品牌工厂拿产品

public class AAConsumer {
    public static void main(String[] args) {
        System.out.println("=======苹果产品=======");
        AppleFactory appleFactory = new AppleFactory();
        PadProduct  applePadProduct = appleFactory.PadProduct();
        applePadProduct.bootup();
        applePadProduct.pencil();
        applePadProduct.shutdown();
        PhoneProduct  applePhoneProduct = appleFactory.PhoneProduct();
        applePhoneProduct.bootup();
        applePhoneProduct.phonecall();
        applePhoneProduct.shutdown();

        System.out.println("=======华为产品=======");
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        PadProduct huaweiPadProduct = huaweiFactory.PadProduct();
        huaweiPadProduct.bootup();
        huaweiPadProduct.pencil();
        huaweiPadProduct.shutdown();
        PhoneProduct huaweiPhoneProduct = huaweiFactory.PhoneProduct();
        huaweiPhoneProduct.bootup();
        huaweiPhoneProduct.phonecall();
        huaweiPhoneProduct.shutdown();
    }
}

运行截图+结构图

结构图

运行截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值