第1页共14页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共14页题目:抽象工厂模式学生姓名张婧学号201021077院系信息科学与技术学院专业计算机应用技术年级2010级第2页共14页第1页共14页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共14页抽象工厂模式在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作
如何应对这种变化
如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合
这就要用到抽象工厂模式
抽象工厂模式是简单工厂模式和工厂方法模式的升级版,它有更大的灵活性,同时也更加复杂一些
为了理解抽象工厂,我们考虑这样一个实际例子:如果你想吃饭了,怎么办自己做吗
自己做就相当于程序中直接使用new
当然是自己下个指令,别人来做更爽
那就把做饭的任务交给厨师吧,那么他就是一个做饭的工厂了,你告诉他要吃红烧肉,等会他就从厨房给你端出来一盘香喷喷的红烧肉了,再来个清蒸鱼吧
下图1就是这个问题的模型
第3页共14页第2页共14页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共14页图1显然到了这里,你是Client,厨师就是工厂,他拥有做红烧肉的方法,做清蒸鱼的方法,这些方法返回值就是食物抽象
红烧肉、清蒸鱼就是食物的继承类,简单工厂模式也成型了
简单工厂模式结构第4页共14页第3页共14页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第4页共14页图2优点:允许客户端相对独立的创建产品的过程,并且在系统引入新产品的时候无需修改客户端
缺点:对修改不封闭,新增加产品您要修改工厂
违法了开闭法则(OCP)
工厂方法模式生活例子:厨师手艺再好,总有不会做的菜