《Java设计模式及实践》—2.2.2 工厂方法模式

举报
华章计算机 发表于 2019/07/22 12:20:31 2019/07/22
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第2章,第2.2.2节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.

2.2.2 工厂方法模式

工厂方法模式是在静态工厂模式上的改进。工厂类被抽象化,用于实例化特定产品类的代码被转移到实现抽象方法的子类中。这样不需要修改就可以扩展工厂类。工厂方法模式的实现如图2-3所示。

 image.png

图 2-3

下面来看一些样例:假设有一个汽车工厂,目前只生产两种车型,小型跑车和大型家用车。在软件中,顾客可以自由决定买小型车或大型车。首先,我们需要创建一个Vehicle类和两个子类,子类分别为SportCar和SedanCar。

创建Vehicle类结构之后就可以创建抽象工厂类。要注意工厂类中并不包含任何创建新实例的代码:

 image.png

为了增加汽车实例化的代码,我们创建了VehicleFactory的子类,即CarFactory类,并在CarFactory中实现从父类中调用的createVehicle抽象方法。实际上,Vehicle-Factory类将Vehicle类的具体实例化操作委托给了它的子类:

 image.png

在客户端,我们只需要创建工厂类并创建订单:

 image.png

此时,我们意识到汽车工厂所带来的收益,是时候进一步拓展业务了。市场调查显示卡车的需求量很大,因此我们建一个卡车工厂(TruckFactory)。

 image.png

image.png

 

我们使用如下代码来下订单:

 image.png

匿名具体工厂模式

继续在前面的代码中添加一个BikeFactory,使得顾客可以选择购买小型或大型自行车。这里不用创建单独的类文件,只需直接在客户端代码中简单地创建一个匿名类来对VehicleFactory类进行扩展即可:

      image.png

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。