Java设计模式(二):工厂模式(Factory)之简单工厂

不管是什么东西,无论其实践性有多强,一旦变成了理论,就会变得很抽象,很难抓住其核心.

 

工厂模式这个东西怎样理解呢?
我们平常在日常生活中,要用到洗发水,牙膏等,我们怎样得到这些东西呢?当然我们不会自己去生产洗发水,牙膏这些东西,而是生产洗发水,牙膏的工厂向我们进行提供.这就是我们实际生活当中的工厂模式.

对比到编程中来,工厂模式就是用来创建实例对象的。实例对象就好比是洗发水,牙膏这些日常用品,通过工厂产生出来,供我们使用.以前我们自己new对象,现在我们向工厂要对象。再说得直白点,所谓的工厂就相当于创建实例对象的关键字new,我们把这种通过工厂创建实例对象的方式就称为工厂模式. (纯属个人理解,当不得真的)

 


什么是简单工厂模式?
就是通过一个类(相当于工厂)来创建其它类的实例
简单示例:

class Simple{
}


通过new关键字创建实例对象:

Simple simple = new Simple();


现在不想通过new关键字来创建实例, 创建产生Simple实例对象的工厂类:

class SimpleFactory{
    public static Simple getSimpleInstance(){
        return new Simple();
    }
}


通过工厂产生Simple实例对象:

Simple simple = SimpleFactory.getSimpleInstance();



现在加深一点,如果Simple是其它类的父类或者父接口,再加上反射,就可以很好的实现其功能的拓展性:它能够在不改动代码的情况下,产生子类的实例对象:如下所示:

interface Simple{
}

class SimpleFactory{
	public static Simple getSimpleInstance(String name){//将子类的名字传递进来
		try{
			return (Simple)Class.forName(name).newInstance();
		}catch(Exception e){
			throw new RuntimeException(e);
		}
	}
}



再加深一点,如果利用配置文件,就可以自由的进行类与类之间的切换,真正做到不对源代码进行修改:

class SimpleFactory{
	private static String className;
	static{
		try{ //进行配置文件的加载
			InputStream inStream = new FileInputStream("config.properties");
			Properties pros = new Properties();
			pros.load(inStream);
			className = pros.getProperty("className");
			inStream.close();
		}catch(Exception e){
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public static Simple getSimpleInstance( ){
		try{
			return (Simple)Class.forName(className).newInstance();//利用反射得到子类的实例对象
		}catch(Exception e){
			throw new RuntimeException(e);
		}
	}
}


配置文件写法如下:(config.properties)

className=包名.SimpleImpl (注意:这里要写类的全名)


总结:以上就是关于简单工厂模式的介绍。 工厂模式一般是和单例模式结合起来使用,即将工厂设置成为单例即可,这里只要将单例的设计步骤加进去就行了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值