工厂方法模式-----女娃造人的故事

工厂方法模式的定义:


定义一个用于创建对象的接口,让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类。


在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;Creater为抽象创建类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的。


以下为一个例子:


女娲造人,首先采集黄土捏成人形,然后放到阴阳八卦炉中烧制,由于烧的时间不同创造出不同肤色的人种。


抽象产品类-----------------人

public abstract class AbstractHumanFactory {
	
	public abstract <T extends Human> T createHuman(Class<T> c);

}

具体产品类-------------------白种人 黄种人 黑种人

public class WhiteHuman implements Human{

	
	@Override
	public void getColor() {
		System.out.println("白种人的皮肤是白色的");
	}
	@Override
	public void talk() {
		System.out.println("白种人会说话,一般都是单字节的");
	}
	
}

public class YellowHuman implements Human{

	@Override
	public void getColor() {

		System.out.println("黄种人皮肤是黄色的");
	}
	@Override
	public void talk() {

		System.out.println("黄种人会说话 但一般都是双字节的");
	}
	
}

 

public class BlackHuman implements Human {

	@Override
	public void getColor() {
		
		System.out.println("黑众人的皮肤是黑色的");
		
	}
	@Override
	public void talk() {

		System.out.println("黑人会说话但一般人听不懂");
	}

}


抽象工厂类--------------炉(用于烧造人)

public abstract class AbstractHumanFactory {
	
	public abstract <T extends Human> T createHuman(Class<T> c);

}


具体工厂类---------------阴阳八卦炉

public class HumanFactory extends AbstractHumanFactory{

	@Override
	public <T extends Human> T createHuman(Class<T> c) {

		Human human = null;
		
		 
			try {
				human = (Human)Class.forName(c.getName()).newInstance();
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		 
			
		return (T)human;
	}
	
}


场景类-----------------------女娲


public class NvWa {

	public static void main(String[] args) {
		
		AbstractHumanFactory YinYangLu = new HumanFactory();
		System.out.println("--造出的第一批是白种人--");
		Human whiteHuman = YinYangLu.createHuman(WhiteHuman.class);
		whiteHuman.getColor();
		whiteHuman.talk();
		System.out.println("--造出的第一批是黄种人--");
		Human yellowHuman = YinYangLu.createHuman(YellowHuman.class);
		yellowHuman.getColor();
		yellowHuman.talk();
		System.out.println("--造出的第一批是黑种人--");
		Human blackHuman = YinYangLu.createHuman(BlackHuman.class);
		blackHuman.getColor();
		blackHuman.talk();
		
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值