设计模式之工厂方法(factory method)
工厂是制造产品的,那这个工厂具体制造什么样的产品则根据各个产业领域不同而不同。但是工厂对外的只是产品,具体产品如何生产对用户来说是透明的。
下面列出一副图来描述工厂方法的结构:
上述图中Product是接口部分.
ConcreteProduct是具体的产品接口实现。
FactoryMethod是父类工厂。
ConceteCreateor来返回ConcreteProduct实例。
下图是工厂方法简单原型图:
下面我列举实际项目中的工厂方法使用例子:
对于移动平台的项目,尤其针对android会有很多渠道,比如91比如360等等,然后这些渠道都有自己的特点,因此在我们项目当中需要为这些不同的平台分别定制,但是产品的核心功能是不变的,由此需求,工厂方法设计再合适不过了。
下面是例子工程结构图:
上图中的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();}}
第一种情况需要子类来定义实现,避免了不得不实例化不可预见类的问题,第二种情况则展现了其灵活性、可扩展性因此,在上述例子这种需求项目中采用了这种情况。