首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

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

2012-12-24 
设计模式07---设计模式之工厂方法模式(Factory Method)1.场景问题导出数据的应用框架考虑这样一个实际应用

设计模式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.心得

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

热点排行