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

学过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();
	}

}






 

posted @ 2014-07-27 13:44  xmc0551  阅读(214)  评论(0编辑  收藏  举报