首页 > 其他 > 详细

抽象工厂

时间:2020-03-10 23:41:31      阅读:60      评论:0      收藏:0      [点我收藏+]

定义

抽象工厂提供一个创建一系列相关或相互依赖的对象的接口

适用场景

适合一系列产品同一产品族一起使用创建的场景
产品族的概念可以到我写的另一篇关于工厂方法的博客中查看

优点

将一个系列的产品统一到一起进行创建

缺点

  1. 在规定了所有可能被创建的产品集合,想在产品集合中添加新的产品较困难,需要修改接口中的内容,违反了开闭原则
  2. 增加了系统的抽象性与理解难度

我们用具体的代码来看看抽象工厂到底是怎么样的吧

我们用电子产品来举例说明,简单设定一个场景吧
假设我的游戏笔记本与锤子手机坏掉了(呸呸呸,千万别坏),我需要一台新的电脑和手机

//手机
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();

    }
}

别丢香蕉皮啊,我用的华为手机(我还是爱国的),到这里,抽象工厂呢就已经写完了,其实仔细观察是可以发现,抽象工厂与工厂方法基本都是差不多的,只不过工厂方法是创建单一产品,而抽象工厂是创建同一产品族的所有产品,一个是生产同一种产品的工厂,一个是生产一系列产品的工厂

在新增产品族的时候,抽象工厂是符合开闭原则的,但是如果要在一个产品族内新增一个产品的话,是需要修改接口的,改动还挺大,这样就违背了开闭原则,具体使用什么,还是得根据具体的业务来决定,在使用抽象工厂的时候,如果半年至一年时间新增一个产品,那么还是可以接受的,如果产品新增很频繁的话,就不是那么适合了,还是那句话,根据具体业务来决定使用什么

代码已同步码云,点击即可跳转过去

抽象工厂

原文:https://www.cnblogs.com/islcz/p/12459329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!