大话设计模式读书笔记--5.工厂方法模式

生活中的例子:

车有很多的品牌, 宝马,奔驰等, 制造汽车的工厂就是抽象出来的工厂, 而制造宝马汽车的工厂 ,就是具体的产品工厂,这就是工厂方法的应用场景

定义

工厂方法模式: 定义一个创建对象的接口, 让子类决定实例化哪一个类, 工厂方法使一个类的实例化延伸到了子类

模式结构

Creator:  抽象工厂, 声明工厂方法

ConcreteCreator: 具体工厂,创建具体产品对象

Product:抽象产品,声明产品共有的接口

ConcreteProduct:具体产品

模式实现

<<简单工厂模式>>中说道, 工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,但是增加新的功能需要修改工厂类中额case分支条件,修改原有的类,违背了开闭原则

下图是对简单工厂模式的结构改进

把简单工厂类中的逻辑判断移到客户端, 当增加减法时,增加减法类和和减法工厂类,而不是修改原来的类

 下面是工厂方法的实现

场景:雷锋帮助孤寡老人, 大学生帮助孤寡老人, 志愿者帮助孤寡老人

场景分析:雷锋是可以抽象为 乐于帮助人的群体,大学生和志愿者是具体的群体

下载代码,解压后目录如下图:

优缺点

优点:克服了简单工厂模式违背开闭原则,又保持了封装对象创建过程的优点

缺点:每增加一个产品,就需要加一个产品工厂类,增加了额外的开发量

使用场景

一个类想要由自己的子类来定义某对象的创建过程。

posted @ 2017-02-16 20:05  liuconglin  阅读(449)  评论(0编辑  收藏  举报