设计模式之禅-工厂模式

个人blog 此篇博文地址:http://www.sanyinchenblog.com/?p=244

工厂模式:

定义一个抽象工厂接口,让子类去决定要实例化哪一个类。

demo(https://github.com/sanyinchen/UMLDemo)

书中举了一个女娲造人的例子,女娲有一个八卦炉,然后要通过这个八卦炉烧纸三种肤色的人,分别是白种人,黑种人,和黄种人。

我们来看一下UML视图:


Nv在这里是一个场景类。

我们现在主要来看一下场景类和抽象工厂类:
NV:


public class NvWa {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("女娲造黄种人");
		HumanFactory factory = new HumanFactory();
		Human human = factory.creatHuman(YellowHUman.class);
		human.getColor();
		human.talK();
		System.out.println("女娲造黑种人");
		human = factory.creatHuman(BlackHUman.class);
		human.getColor();
		human.talK();
		System.out.println("女娲造白种人");
		human = factory.creatHuman(WhiteHUman.class);
		human.getColor();
		human.talK();

	}
AbstrctHumanFactory:



package com.sanyinchen.factory;

public abstract class AbstrctHumanFactory {
	public abstract <T extends Human> T creatHuman(Class<T> c);
}

HumanFactory:


package com.sanyinchen.factory;

public class HumanFactory extends AbstrctHumanFactory {

	@SuppressWarnings({ "unchecked", "unchecked" })
	@Override
	public <T extends Human> T creatHuman(Class<T> c) {
		// TODO Auto-generated method stub
		T human = null;
		try {
			human = (T) Class.forName(c.getName()).newInstance();
		} catch (InstantiationException | IllegalAccessException
				| ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return human;
	}
}
运行结果:



女娲造黄种人
我是黄种人
黄种人在说话
女娲造黑种人
我是黑种人
黑种人在说话
女娲造白种人
我是白种人
白种人在说话


工厂模式的优点:


(1)具有良好的封装性

(2)工厂模式具有很好的扩展性

(3)屏蔽产品类

(4)工厂模式是典型的解耦框架

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值