JAVA设计模式:工厂模式

     东汉《风俗通》记录了一则神话故事:“开天辟地,未有人名,女娲搏黄土做人”讲诉的内容是大家非常熟悉的女娲造人的故事。开天辟地之初,大地并没有生物,

只有苍茫大地,存粹而洁净的自然环境,寂寞而又寂寞,于是女娲决定创造一个新物种来增加认识的繁荣,怎么制造呢?

    别忘了女娲是神仙,没有办不到的事情,造人的过程是这样的:首先女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时可能发生:

   第一次烤泥人,感觉应该熟了,往大地上乙方,哇没有烤熟,于是一个白人诞生了。

   第二次烤泥人,上一次没烤熟,这次多烤一会儿,放到世界一看,嘿,熟过头了,于是黑人诞生了

   第三次烤泥人,以便烧制以便查看,知道表皮微黄,嘿,真正好,于是黄人出现了。

   这个造人的过程是比较有意思的,是不是可以通过软件开发来实现这个过程呢?古人云:“三人行,必有我师”

在面向对象的思维中,万物皆对象,是对象我们就可以通过软件设计来实现。首先对造人的过程进行分析。该过程涉及三个对象:女娲、八卦炉、三种肤色不同的人。女娲可以使用场景类Client来表示,八卦炉类似于一个工厂,负责制造生产产品(即人类),三种不同肤色的人,他们都是同一个接口下的不同实现类,都是人嘛。知识肤色,语言不同,对于八卦炉来说都是它生产出的产品。

 

AbstractHumanFactory是一个抽象类。定义了一个八卦炉具有的整体功能,

HumanFactory为实现类,完成具体的任务--创建人类;

Human接口是人类的总称,其三个实现类分别为三类任重:

NvWa类是一个场景类,负责模拟这个场景,执行相关任务。

 


 

public class NvWa {

	public static void main(String[] args) {

		/***
		 * 声明阴阳八卦炉
		 */
		AbstractHumanFactory YinYangLu = new HumanFactory();

		System.out.println("造出的第一批人事白色人种");

		Human witeHuman = YinYangLu.createHuman(WhiteHuman.class);

		witeHuman.getColor();

		witeHuman.talk();

		System.out.println("第二次造人,火红过猛,于是黑人产生了");
		Human blackHuman = YinYangLu.createHuman(BlackHuman.class);

		blackHuman.getColor();

		blackHuman.talk();

		System.out.println("第三次造人,火红刚好,于是黄人产生了");
		Human yellowHuman = YinYangLu.createHuman(YellowHuman.class);

		yellowHuman.getColor();

		yellowHuman.talk();

	}

}


 

public abstract class AbstractHumanFactory {

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

}


 

public interface Human {

	public void getColor();

	public void talk();

}


 

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();

<pre class="java" name="code">public class YellowHuman implements Human {

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

	@Override
	public void talk() {
		System.out.println("黄色人种会说话,一般都是双字节");
	}

}

} catch (Exception e) {System.out.println("人种生成错误!");}return (T) human;}}
 
public class BlackHuman implements Human {

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

	@Override
	public void talk() {
		System.out.println("黑人会说话,一般人听不懂");
	}

}



 

public class WhiteHuman implements Human {

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

	@Override
	public void talk() {
		System.out.println("白色人种会说话,一般人听不懂");
	}

}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值