前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >23种设计模式-抽象工厂模式

23种设计模式-抽象工厂模式

作者头像
Python进击者
发布2019-09-17 15:14:04
2500
发布2019-09-17 15:14:04
举报
文章被收录于专栏:JAVAandPython君JAVAandPython君

1

写在前面的话

这一章我们来学习一下抽象工厂模式

• 抽象工厂模式

– 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

– 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。

总的来说,它是创建一类产品,而不是单个产品。

2

抽象工厂模式

用一个代码示例来解释抽象工厂

  1. 首先我们通过模拟造车工厂,把车上的引擎和座椅分为两类,一类是奢华的,一类是很low的

2.我们来创建Engine.java (引擎接口)和Seat.java( 座椅接口 ),并且分别写出奢华和low两种情况的类。

代码语言:javascript
复制
public interface Engine {
    void run();
}

/***
 * 在引擎里面分为  奢华(Luxury)和 垃圾(low)
 */
class LuxuryEngine implements Engine{

    @Override
    public void run() {
        System.out.println("奢华引擎,跑的超快!");
    }
}
class LowEngine implements Engine{

    @Override
    public void run() {
        System.out.println("很菜的引擎,跑的慢!");
    }
}
代码语言:javascript
复制
public interface Seat {
     void feel();
}
/***
 * 在座椅里面分为  奢华(Luxury)和 垃圾(low)
 */
class LuxurySeat implements Seat{

    @Override
    public void feel() {
        System.out.println("超级舒服!");
    }
}
class LowSeat implements Seat{

    @Override
    public void feel() {
        System.out.println("坐的很不爽");
    }
}

3.然后我们来开始创建工厂接口 ---CarFactory.java

代码语言:javascript
复制
  public interface CarFactory {
    Engine createEngine();
    Seat createSeat();
  }

在这个接口里,我们提供了创建引擎和创建座椅的方法,并且返回Engine和Seat对象。

4. 因为抽象工厂是创建一个产品族,而不是单个产品,所以我们来创建一个生产low的产品的工厂和一个生产奢华的产品的工厂,这两个工厂都继承于Carfactory接口。

代码语言:javascript
复制
public class LowFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new LowEngine();
    }

    @Override
    public Seat createSeat() {
        return new LowSeat();
    }
}
代码语言:javascript
复制
public class LuxuryFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new LuxuryEngine();
    }

    @Override
    public Seat createSeat() {
        return new LuxurySeat();
    }
}

5. 最后我们来测试一下我们的代码:

代码语言:javascript
复制
public class Test {
    public static void main(String[] args){
        CarFactory carFactory =new LuxuryFactory();
        Engine engine = carFactory.createEngine();
        engine.run();

        CarFactory carFactory1  = new LowFactory();
        Seat seat = carFactory1.createSeat();
        seat.feel();
    }
}

输出结果:

代码语言:javascript
复制
奢华引擎,跑的超快!
坐的很不爽

Process finished with exit code 0

分析:可以看出三个工厂都有自己的利弊之处,但是实际开发中,抽象工厂和方法工厂用的比较少,因为它的结构较简单工厂更加的复杂,一般抽象工厂都用于jdk开发和一些大型开源框架中。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档