抽象工厂
定义
抽象工厂提供一个创建一系列相关或相互依赖的对象的接口
适用场景
适合一系列产品同一产品族一起使用创建的场景
产品族的概念可以到我写的另一篇关于工厂方法的博客中查看
优点
将一个系列的产品统一到一起进行创建
缺点
- 在规定了所有可能被创建的产品集合,想在产品集合中添加新的产品较困难,需要修改接口中的内容,违反了开闭原则
- 增加了系统的抽象性与理解难度
我们用具体的代码来看看抽象工厂到底是怎么样的吧
我们用电子产品来举例说明,简单设定一个场景吧
假设我的游戏笔记本与锤子手机坏掉了(呸呸呸,千万别坏),我需要一台新的电脑和手机
//手机
public interface Phone {
    void produce();
}
//电脑
public interface Computer {
    void produce();
}
emmm,我想要苹果手机与mac电脑
public class AppleComputer implements Computer {
    @Override
    public void produce() {
        System.out.println("大家好,我是苹果电脑");
    }
}
public class ApplePhone implements Phone {
    @Override
    public void produce() {
        System.out.println("大家好,我是苹果手机");
    }
}
我去找一家工厂来帮我把手机与电脑生产出来吧
public interface ElectronicFactory {
    Computer getComputer();
    Phone getPhone();
}
那工厂问我,你想要什么牌子的手机与电脑啊,我说:苹果吧,好看。
然后它就帮我找了一家苹果的工厂,这个工厂呢又生产手机又生产电脑
public class AppleFactory implements ElectronicFactory {
    @Override
    public Computer getComputer() {
        return new AppleComputer();
    }
    @Override
    public Phone getPhone() {
        return new ApplePhone();
    }
}
生产出来之后,我们就去拿货吧
public class Test {
    public static void main(String[] args) {
        ElectronicFactory electronicFactory = new AppleFactory();
        Computer computer = electronicFactory.getComputer();
        Phone phone = electronicFactory.getPhone();
        computer.produce();
        phone.produce();
    }
}
别丢香蕉皮啊,我用的华为手机(我还是爱国的),到这里,抽象工厂呢就已经写完了,其实仔细观察是可以发现,抽象工厂与工厂方法基本都是差不多的,只不过工厂方法是创建单一产品,而抽象工厂是创建同一产品族的所有产品,一个是生产同一种产品的工厂,一个是生产一系列产品的工厂
在新增产品族的时候,抽象工厂是符合开闭原则的,但是如果要在一个产品族内新增一个产品的话,是需要修改接口的,改动还挺大,这样就违背了开闭原则,具体使用什么,还是得根据具体的业务来决定,在使用抽象工厂的时候,如果半年至一年时间新增一个产品,那么还是可以接受的,如果产品新增很频繁的话,就不是那么适合了,还是那句话,根据具体业务来决定使用什么
代码已同步码云,点击即可跳转过去

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号