设计模式--简单工厂

1.定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口,抽象类,也可以是具体类。

2.问题来源:A a = new AImpl(); 此类写在客户端,直接暴露了细节。转化为 A a = Factory.createA(); 这样把工厂的一部分暴露给用户,真正类的创建

                       则包含在了工厂的后面,隐藏了起来。

3.真正能实现功能的是具体的实现类,这些实现类是已经做好的,并不是真的要靠简单工厂来创造出来的,简单工厂的方法无外乎是:实现了选择一个合适的实现类来使用。

   所以说简单工厂方法的主要实现的功能是--选择合适的实现类来创建实例对象。方式:客户端传入参数,factory 追加判断。或者来源于配置文件。或者来源于程序运行期的某个值。

4.使用读取文件的代码实现

public interface Api {

	public void operation(String s);
}

public class ImplA implements Api {

	@Override
	public void operation(String s) {
		System.out.println("ImplA s=="+s);
	}

}

public class ImplB implements Api {

	@Override
	public void operation(String s) {
		System.out.println("ImplB s==" + s);
	}

}

FactoryTest.properties    ImplClass=com.pc.simplefactory.Impl.ImplB


public class Factory {

	public static Api createApi() {
		Properties p = new Properties();
		InputStream in = null;
		try {
			in = Factory.class.getResourceAsStream("FactoryTest.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("ImplClass")).newInstance();
		}catch(InstantiationException e){
			e.printStackTrace();
		}catch(IllegalAccessException e){
			e.printStackTrace();
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}
		return api;
	}
}

public class Client {

	public static void main(String[] args) {
		Api api = Factory.createApi();
		api.operation("^^^^^^^^^^^^^");
	}
}



5.简单工厂的本质---选择实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值