java工厂模式

定义一个用于创建对象的接口, 我们需要一个对象实例的时候就可以通过调用接口的方法来获取我们想要的对象实例。


首先, 最简单的:

/**
* 简单工厂接口, 可以返回实例
*/
public interface SimpleFactory {
	Money getMoney();
}
/**
* 工厂实现类, 返回Money实例
*/
public class MoneyFactoryImpl implements SimpleFactory {

	public Money getMoney() {
		return new Money();
	}

}
public class Money {
	private String country;
	private String value;

	public String getCountry() {
		return country;
	}

	public void setCountry(String country) {
		this.country = country;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	@Override
	public String toString() {
		return "币种:" + this.country + "\n面值:" + this.value;
	}

}
//测试类
public class Test {
	public static void main(String[] args) {
		SimpleFactory<Money> factory = new MoneyFactoryImpl();
		Money money = factory.getMoney();
		
		
	}
}

上面这个是最简单的工厂,  看都能看出来虽然很简单, 但是缺点很多, 所以一般开发似乎都不怎么用。

我觉得最简单, 最好用的就是下面这种, 他可以临时指定要实例化的类, 有点像去工厂, 就说钱, 它就给你钱, 如果你说人, 它就给你造人(不要乱想)。

首先当然还要定义一个接口, 要面向接口编程才可以扩展, 复用嘛。

public interface Factory<T> {
	public T getInstance(Class clazz);
}
//工厂实现类
public class FactoryImpl<T> implements Factory<T> {
	public T getInstance(Class clazz) {
		try {
			return (T) Class.forName(clazz.getName()).newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}

}

//Money类
public class Money {
	private String country;
	private String value;

	public String getCountry() {
		return country;
	}

	public void setCountry(String country) {
		this.country = country;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	@Override
	public String toString() {
		return "币种:" + this.country + "\n面值:" + this.value;
	}

}

//Person类
public class Person{
      private int ID;
      private String name;
      private int age;
      //省略getter、setter
}

//测试类
public class Test{
     public static void main(Sring[] args){
         Factory<Money> fa = new FactoryImpl<Money>();
         Money money = fa.getInstance(Money.class);
         Person person = fa.getInstance(Person.class);
     }
}


上面这个工厂就比较灵活, 只要指定类型它就可以返回一个对象, 也可以通过解析String字符串来指定要创建的类型。用泛型来解决返回的类型问题。


工厂有很多实现, 只不过是一种想法而已, 这样更容易集中管理, 比如说你的项目当中突然要创建Money实例的时候要默认把country设置成中国, 那你需要做的就只是在工厂类里给他设置下就可以了, 而不用整个项目去搜索创建Money类的代码, 然后在每行代码下给country设置成中国。 集中生产也容易集中管理。对于我们开发者来说非常省事。工厂模式也只是一个思想, 如果要用到自己的程序上可以因情况不同, 而设计其他工厂类, 比如抽象工厂也不错。Spring使用IOC, 更智能, 就比如你想要钱, 这时候看手上就是钱, 你想要斧子, 手里突然有了一把斧子,你不需要的时候也不用担心, 自己就没了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值