【设计模式】简单工厂模式(Simple Factory Pattern)

在这里插入图片描述

 

🔥 核心

一个工厂能够根据需要产生不同的产品。

如果是根据参数生产产品,则称为简单工厂模式;定义一个创建对象的工厂接口,其子类自己已经决定好了生产哪一种产品,则称为工厂模式;这个子类工厂能生产一套产品。则称为抽象工厂模式。

 

🙁 问题场景

你开发了一款物流管理系统。最初的版本是为卡车运输设计的,所以大部分代码都是针对名为卡车的类写的。

一段时间后,这款应用非常受欢迎,许多海运公司也向你抛出橄榄枝。

这是个好消息。可是…大部分代码都是针对卡车运输类写的,这时又需要新加入一个轮船运输类…

这时,你又接到了多家航空公司的电话…

 

🙂 解决方案

工厂方法的一个显著特征是,创建对象时,不使用new,而是调用工厂方法。这并不意味着我们不使用new,而是将new的位置放到了工厂方法当中。

我们把工厂方法看成一个工厂,并把它能够产生的对象称为产品,一个工厂能够根据需要产生不同的产品。不知道你有没有发现一个问题:工厂可以返回多种类型的产品,那这个工厂方法的返回值类型是什么?没错,工厂中的所有产品,必须具有相同的父类或接口

好啦!回到刚刚的情景,你接到了海运公司的订单请求。

仔细想一想,卡车运输(TruckTransport)轮船运输(ShipTransport) 都是运输方式,因此让它们都实现接口 运输方式(Transport) ,且它们各自都实现了运输接口的抽象方法 装货(load)卸货(unload)

这时,你只需要坐在办公室里,看着窗外的运输工厂。工厂根据不同的订单,生产并开始一个个 卡车运输轮船运输 。而你的物流管理系统需要在意究竟使用的是哪种运输方式吗?不需要,它只知道这次的 运输方式 可以 装货卸货 即可进行统一的管理。

这时,空运公司又打来了电话。

你从容的按下了接听键。因为你知道,物流管理系统的代码几乎不需要什么大费周章的扩展,你只需要给你的运输工厂加一个switch分支即可!

 

🌈 有趣的例子

圆形(Circle)正方形(Square)三角形(Triangle) 均实现了 图形(Shape) 接口,它们是三种产品。

图形工厂(ShapeFactory) 可以根据传入值(CIRCLE、SQUARE、TRIANGLE)返回不同的产品。
在这里插入图片描述

 三种图形的接口
interface Shape {
   
    void draw();
}

 圆形
class Circle implements Shape {
   
    @Override
    public void draw(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值