设计模块之简单工厂

简单工厂模式:从名字来看 工厂:就是生产产品的,那么在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一个实例,具体的还要看项目需求了,
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值