设计模式之---工厂方法模式

学过spring和hibernate的应该都知道,这个模式在这俩框架里面被用的淋漓尽致,可以说看懂了spring和hibernate那么你会觉得new一个对象什么的简直是个low B。工厂方法的核心思想就是让别人去给我实例化对象,我只要你拿来给我用就行了,我作为调用者我就是牛逼 我管你实例化干了哪些事呢,我都不关心我只关心我用的爽不爽!那么这个专门用来实例化对象的东西就可以称之为工厂,由工厂生产对象~~~

具体看看工厂模式最佳实践:(现在满大街都在提倡什么面向接口编程,我就是要用抽象类!你咬我啊~~)

先规范化一个工厂规定工厂能干哪些事情,嗯,我们这个工厂是用来造人的!(这个相当于集团控股总部,不干事只出规章制度):

public abstract class AbstactHumanFactory
{
	public abstract <T extends Human> T createHuman(Class<T> c);
}
这个是真正的工厂了用来造人!那么具体要造什么人呢?我也不知道,我只知道我要造人类,你只要告诉我要造一个什么样的人类我就还你一个大活人。在java中就是通过类加载器实现的。(关于类加载器戳这→_→:http://blog.csdn.net/yanwushu/article/details/7574713)

public class HumanFactory extends AbstactHumanFactory
{

	@Override
	public <T extends Human> T createHuman(Class<T> c)
	{
		Human human = null;
		try
		{
			human = (Human) Class.forName(c.getName()).newInstance();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

		return (T) human;
	}
}
那么我怎么向你描述我要一个什么样的人呢?我总不能说:喂!内谁,给我造一个美女!这个是不现实的,工厂哪知道什么是美女。。。因此我们只能事先定义一个模版,把这个模版拿给工厂让他去批量生产人类,下面都是模版:

public interface Human
{
	public void getColor();
	public void talk();
}
public class WhiteMan implements Human
{

	@Override
	public void getColor()
	{
		System.out.println("White");
	}

	@Override
	public void talk()
	{
		System.out.println("WhiteMan");
	}

}
public class BlackMan implements Human
{

	@Override
	public void getColor()
	{
		System.out.println("Black");
	}

	@Override
	public void talk()
	{
		System.out.println("BlackMan");
	}

}
public class YelloMan implements Human
{

	@Override
	public void getColor()
	{
		System.out.println("Yello");
	}

	@Override
	public void talk()
	{
		System.out.println("YelloMan");
	}

}

OK,模版定义完成,下面我们就来造人了!
public class Test
{
	public static void main(String[] args)
	{
		AbstactHumanFactory factory=new HumanFactory();
		System.out.println("--create white man--");
		Human whiteMan = factory.createHuman(WhiteMan.class);
		whiteMan.getColor();
		whiteMan.talk();
		
		System.out.println("--create black man--");
		Human blackMan=factory.createHuman(BlackMan.class);
		blackMan.getColor();
		blackMan.talk();
		
		System.out.println("--create yellow man--");
		Human yellowMan=factory.createHuman(YelloMan.class);
		yellowMan.getColor();
		yellowMan.talk();
	}

}





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值