简简单单理解抽象工厂模式

1. 原理图

简单看一下原理图,ProductFactory用于制造工厂,比如可以制造小米品牌的产品工厂和华为品牌的产品工厂,各种产品再由对应的产品工厂去制造
应用的场景:
比如下图这种情况,在同一产品族中有多个产品等级(不同产品等级对应不同的产品),小米中既有小米杯子又有小米手机,华为中既有华为的杯子又有华为的手机,这时就需要用到抽象工厂模式。

但是这种模式的局限也很明显:每当增加新的一个产品,需要在抽象工厂中修改代码,也需要在具体的实现工厂中修改代码,这样就违背了开闭原则。
好处是啥?顾客能自由的选择喜欢的品牌,比如,我喜欢小米的品牌,那么我就可以用选择用小米旗下的所有产品。也就是说:它能保证客户端始终只使用同一个产品族中的对象。

2. 咱用代码实现来加深加深理解

我们为了代码简单,仅用小米工厂来举例子,下面是项目结构
在这里插入图片描述

具体的代码 ↓

//杯子产品的接口
public interface CupProduct {
    //杯子喝水
    void drink();
}
//手机产品的接口
public interface PhoneProduct {
    //手机打电话
    void call();
}
//我们的主要角色,抽象工厂
public interface ProductFactory {
    //手机产品
    PhoneProduct phone();
    //杯子产品
    CupProduct cup();
}
//小米工厂实现类
public class XiaoMiProductFactory implements ProductFactory {
    @Override
    public PhoneProduct phone() {
        return new XiaoMiPhone();
    }

    @Override
    public CupProduct cup() {
        return new XiaoMiCup();
    }
}
//小米手机实现类
public class XiaoMiPhone implements PhoneProduct {
    @Override
    public void call() {
        System.out.println("用小米手机打电话");
    }
}
//小米杯子实现类
public class XiaoMiCup implements CupProduct {
    @Override
    public void drink() {
        System.out.println("用小米杯子喝水");
    }
}
//最后是我们的客户测试类
public class Client {
    public static void main(String[] args) {
        //创建小米工厂
        XiaoMiProductFactory xiaoMiProductFactory = new XiaoMiProductFactory();

        //用小米工厂生产小米手机和杯子
        PhoneProduct phone = xiaoMiProductFactory.phone();
        phone.call();

        CupProduct cup = xiaoMiProductFactory.cup();
        cup.drink();
    }
}

输出结果:
在这里插入图片描述

到这里我们的抽象工厂就讲解完了,最重要的还是要理解思想,可以回到文章开头,把抽象工厂模式再理解理解

原创文章 34 获赞 8 访问量 1160

猜你喜欢

转载自blog.csdn.net/qq_46225886/article/details/105649843