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

设计形式之工厂方法(factory method)

2013-01-02 
设计模式之工厂方法(factory method) Factory Method 模式的核心用意:使得一个类的实例化延迟到子类,让子

设计模式之工厂方法(factory method)


 Factory Method 模式的核心用意:使得一个类的实例化延迟到子类,让子类决定实例化哪个具体的类。

工厂是制造产品的,那这个工厂具体制造什么样的产品则根据各个产业领域不同而不同。但是工厂对外的只是产品,具体产品如何生产对用户来说是透明的。

下面列出一副图来描述工厂方法的结构:

设计形式之工厂方法(factory method)

设计形式之工厂方法(factory method)

上述图中Product是接口部分.

ConcreteProduct是具体的产品接口实现。

FactoryMethod是父类工厂。

ConceteCreateor来返回ConcreteProduct实例。

下图是工厂方法简单原型图:

设计形式之工厂方法(factory method)

设计形式之工厂方法(factory method)设计形式之工厂方法(factory method)

下面我列举实际项目中的工厂方法使用例子:

对于移动平台的项目,尤其针对android会有很多渠道,比如91比如360等等,然后这些渠道都有自己的特点,因此在我们项目当中需要为这些不同的平台分别定制,但是产品的核心功能是不变的,由此需求,工厂方法设计再合适不过了。

下面是例子工程结构图:

设计形式之工厂方法(factory method)

上图中的com.zsh.lib 是我们的核心代码包,com.zsh.test是渠道部分。

GameManager负责整合产品的核心调度:具体实现如下

package com.zsh.test;import com.zsh.lib.MainEnter;import com.zsh.lib.UserFactory;public class PublicMain extends MainEnter{public static void main(String args[]){PublicMain publicMain = new PublicMain();publicMain.init();}public void init(){super.init();}@Overrideprotected UserFactory  getUserFactory(){return new FactoryMethod();}}

使用工厂方法模式需要考虑两种不同的情况。1)UserFactory是一个抽象类不提供它所声明的工厂方法实现。2)UserFactory是一个具体的类为工厂方法提供一个缺省的而实现。因此这种情况需要用户自己定义并实现工厂方法。上述例子中使用了这种情况。

第一种情况需要子类来定义实现,避免了不得不实例化不可预见类的问题,第二种情况则展现了其灵活性、可扩展性因此,在上述例子这种需求项目中采用了这种情况。


热点排行