读书人

设计方式07-设计模式之工厂方法模式(F

发布时间: 2012-12-24 10:43:13 作者: rapoo

设计模式07---设计模式之工厂方法模式(Factory Method)
1.场景问题

导出数据的应用框架

考虑这样一个实际应用,实现一个导出数据的应用框架,来让客户选择数据的导出方式(可能有数据库导出方式,可能有文本导出方式),并真正执行数据导出。

1.1框架的基础知识1.1.1框架是什么?

框架是能完成一定功能的半成品软件。

1.1.2框架能干什么呢?

能完成一定的功能,加快程序开发的速度

给我们一个精良的程序架构

1.1.3对框架的理解

基于框架开发,事情还是那些事情,只是看谁做的问题。

基于框架开发,可以不去做框架所做的事情,但是应该明白框架在干什么,以及框架是如何实现其功能的。

1.1.4框架与设计模式的关系

设计模式比框架更加抽象

设计模式是比框架更小的体系结构元素

框架比设计模式更加特例化

1.2问题所在:

分析上面的应用框架,不管用户选择什么样的导出格式,最后导出的都是一个文件,而且系统不知道究竟要导出什么样的文件,因此应该有一个接口,来描述最后生成的对象,并操作输出的文件。

示例代码如下

Product实际使用对象的接口

ConcreteProduct具体的接口的实现对象

Creator创建器,声明工厂方法

ConcreteCreator具体的创建器的对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例

2.2工厂方法模式示例代码


代码实现如下:

3.6.2使用Creator创建出来的对象的调用情况示意图如下

设计方式07-设计模式之工厂方法模式(Factory Method)


4.工厂方法模式与IoC/DI

IoC控制反转

DI依赖注入

4.1理解概念 4.1.1参与者都有谁?

一个是某个对象,一个是IoC/DI容器,有一个是某个对象的外部资源

这里某个对相关当然是指任意的某个Java对象

4.1.2谁依赖谁?

当然是某个对象依赖IoC/DI容器

4.1.3为什么需要依赖?

对象需要IoC/DI的容器来提供对象需要的外部资源。

4.1.4谁注入谁?

很明显是IoC/DI的容器来注入某个对象

4.1.5到底注入什么?
注入某个对象所需要的外部资源

4.1.6谁控制谁?
当然是IoC/DI的容器来控制对象

4.1.7控制什么?

主要是控制对象实例的创建

4.1.8为啥叫做“反转”?
如果在A中需要C,那么会直接创建C的对象,这样就是A主动获取所需要的资源文件C类,这样被称为是正向的。那么什么叫做反向呢?就是说A不再主动获取C类。而是被动等待,等待IoC/DI获取一个C类的实例,然后反向的注入A中。

4.1.9依赖注入和控制反转是同一概念么?

依赖注入:应用程序依赖容器创建,并注入它所需要的外部资源;

控制反转:容器控制应用程序,由容器反向的向应用程序注入其所需要的外部资源。

4.2工厂方法模式与IoC/DI的关系

上面讲了,有了IoC/DI后,应用程序不再主动了,而是被动的等待由容器来注入资源。那么在编写代码的时候,一旦要用到外部资源,就会开一个窗口,让容器能注入进来,也就是提供给容器使用过的注入的途径,当然这都不是重点,我们用setter注入来示例一下,使用IoC/DI的示例代码如下:

台式机希捷硬盘对象对应着台式机希捷硬盘对象的行为,笔记本IBM硬盘对应着笔记本IBM硬盘的行为,这是一种典型的平行的类层次结构。

主要用来把一个类层次中的某些行为分离出来,让类层次中的类把原本属于自己的原则,委托给分离出去的类去实现,从而使类层次更加简单,因此被称为平行的类层次结构。

6.参数化工厂方法

定义:通过工厂方法传递参数,根据参数的不同,来创建不同的产品对象。

场景问题示例代码如下

package demo05.factorymethod.example7;public class Client {public static void main(String[] args) {// 创建需要使用的Creator对象ExportOperate operate = new ExportOperate2();// 下面变换传入的参数来测试参数化工厂方法operate.export(1, "Test1");operate.export(2, "Test2");operate.export(3, "Test3");}}

7.工厂方法模式的优缺点:

优点:可以在不知道具体实现的情况下编程。

更容易扩展新对象的版本

连接平行的类层次

缺点:具体产品对象和工厂方法的耦合性

8.思考工厂方法模式:

本质:延迟到子类才实现。

注意:在选择实现的时候,可能会感觉像是简单工厂模式,实际上具体实现都是“选择实现”,但是不同点在于简单工厂是在工厂中实现,而工厂方法中会把这个工作延迟到子类来实现。

9.对设计原则的体现

工厂方法模式很好的体现了“依赖倒置原则”

依赖倒置原则告诉我们:要依赖抽象,不要依赖具体类。

10.心得

泥马,这个工厂方法模式真蛋疼,我理解了好几天呢,说实话,不好理解,现在我只处于看懂了的阶段,还没有融会贯通,先写出来,以后慢慢理解

读书人网 >软件开发

热点推荐