设计模块之简单工厂

来源:互联网 发布:手机淘宝联盟怎样提现 编辑:程序博客网 时间:2024/06/05 07:31

简单工厂模式:从名字来看 工厂:就是生产产品的,那么在java中肯定是创建对象的,而在java中创建对象我们new一个就是了,为什么还要使用工厂去new对象呢?先看下简单工厂模式后再回来解释这个问题


简单工厂模式的定义:提供一个创建实例功对象的功能,而无需关心其具体的实现,被创建实例的类型可以是接口,抽象类,具体的类


简单工厂结构如图:


说明:

Api:定义客户所需的功能接口(也就是获取创建实例的对象)

Impl:具体实现Api的实现类,可能会有多个

Factory:工厂,选择合适的实现类来创建Api接口对象

Client:客户端,通过Factory去获取Api接口对象,然后面向Api接口编程


代码如下:

Api.java

/** * 接口的定义,该接口可以通过简单工厂来创建 */public interface Api {/** * 示意,具体的功能方法的定义 * @param s 示意,需要的参数 */public void operation(String s);}

Factory.java

/** * 工厂类,用来创造Api对象 */public class Factory {/** * 具体的创造Api对象的方法 * @param condition 示意,从外部传入的选择条件 * @return 创造好的Api对象 */public static Api createApi(int condition){//应该根据某些条件去选择究竟创建哪一个具体的实现对象//这些条件可以从外部传入,也可以从其它途径获取//如果只有一个实现,可以省略条件,因为没有选择的必要//示意使用条件Api api = null;if(condition == 1){api = new ImplA();}else if(condition == 2){api = new ImplB();}return api;}}
ImplA.java

/** * 接口的具体实现对象A  */public class ImplA implements Api{public void operation(String s) {//实现功能的代码,示意一下System.out.println("ImplA s=="+s);}}

ImplB.java

/** * 接口的具体实现对象B  */public class ImplB implements Api{public void operation(String s) {//实现功能的代码,示意一下System.out.println("ImplB s=="+s);}}

Client.java

/** * 客户端,使用Api接口 */public class Client {public static void main(String[] args) {//通过简单工厂来获取接口对象Api api = Factory.createApi(1);api.operation("正在使用简单工厂");}}

从上面的代码中Client中并没有直接去new一个 ImplA的实例对象,而是通过Factory工厂类去实现new一个ImplA类,这就相当于在Client类与ImplA类之间转换了一下,
从而我们要创建什么对象,只要在createApi()中的参数变一下就得到了相应的对象,具体的实现是封装在Factory类中,这样做的好处是以后系统维护和升级中如果要添加一个实例对象,只要在Factory中添加相应的代码即可,我们在外部调用就变的很简单,通常还要做缓存,而不是每次都去new一个实例,具体的还要看项目需求了,


0 0