设计模式1--简单工厂模式

简单工厂的本质: 选择实现
package com;

public interface Api {
	void opreation(String s);
}

package com.impl;
import com.Api;
public class ImplA implements Api {

	@Override
	public void opreation(String s) {
		System.out.println("我是A的实现:" + s);
	}

}

package com.impl;
import com.Api;
public class ImplB implements Api {

	@Override
	public void opreation(String s) {
		System.out.println("我是B的实现:" + s);
	}

}

import com.Api;
import com.impl.ImplA;
import com.impl.ImplB;

public class Factory {
	public static Api createApi(String which){
		Api api= null;
		if("A".equals(which)){
			api = new ImplA();
		}else if("B".equals(which)){
			api = new ImplB();
		}
		return api;
	}
}

public class Client {
	public static void main(String[] args){
		Factory.createApi("A").opreation("SHIXIN");
		Factory.createApi("B").opreation("AXUE");
	}
}

 

简单工厂方法的内部主要实现的功能是“选择合适的实现类”来创建实例对象。既然要实现选择,那么就需要选择的条件或者是选择的参数,选择条件爱你或者是参数的来源通常有以下几种:

1 来源于客户端,有Client来传入参数(上例即是)

2 来源于配置文件,从配置文件获取用于判断的值,优点:新增加实现类不用修改工厂类

3 来源于程序运行期的某个值,比如从缓存中获取某个运行期的值

第2种,配置文件用最简单的Properties文件,实际开发中多是xml配置。定义一个名称为“bean.properties”的配置文件,放置到Factory同一个包下面,内容如下:

implA = com.impl.ImplA
implB = com.impl.ImplB


则Factory代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.Api;

public class Factory {
	public static Api createApi(String which){
		Properties p = new Properties();
		InputStream in = null;
		try{
			in = Factory.class.getResourceAsStream("bean.properties");
			p.load(in);
		}catch(IOException e){
			System.out.println("装载工厂配置文件出错了,具体的堆栈信息如下:");
			e.printStackTrace();
		}finally{
			try{
				in.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		Api api= null;
		try {
			api = (Api)Class.forName(p.getProperty(which)).newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return api;
	}
}


Client代码如下:

public class Client {
	public static void main(String[] args){
		Factory.createApi("implA").opreation("SHIXIN");
		Factory.createApi("implB").opreation("AXUE");
	}
}

 

简单工厂的特点:封装、解耦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值