《Java设计模式及实践》—2.2.2 工厂方法模式
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第2章,第2.2.2节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.
2.2.2 工厂方法模式
工厂方法模式是在静态工厂模式上的改进。工厂类被抽象化,用于实例化特定产品类的代码被转移到实现抽象方法的子类中。这样不需要修改就可以扩展工厂类。工厂方法模式的实现如图2-3所示。
图 2-3
下面来看一些样例:假设有一个汽车工厂,目前只生产两种车型,小型跑车和大型家用车。在软件中,顾客可以自由决定买小型车或大型车。首先,我们需要创建一个Vehicle类和两个子类,子类分别为SportCar和SedanCar。
创建Vehicle类结构之后就可以创建抽象工厂类。要注意工厂类中并不包含任何创建新实例的代码:
为了增加汽车实例化的代码,我们创建了VehicleFactory的子类,即CarFactory类,并在CarFactory中实现从父类中调用的createVehicle抽象方法。实际上,Vehicle-Factory类将Vehicle类的具体实例化操作委托给了它的子类:
在客户端,我们只需要创建工厂类并创建订单:
此时,我们意识到汽车工厂所带来的收益,是时候进一步拓展业务了。市场调查显示卡车的需求量很大,因此我们建一个卡车工厂(TruckFactory)。
我们使用如下代码来下订单:
匿名具体工厂模式
继续在前面的代码中添加一个BikeFactory,使得顾客可以选择购买小型或大型自行车。这里不用创建单独的类文件,只需直接在客户端代码中简单地创建一个匿名类来对VehicleFactory类进行扩展即可:
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)