`
youngerblue
  • 浏览: 43504 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

设计模式之工厂模式(女娲造人)

阅读更多
package design.factory;

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

}

package design.factory;

public class BlackHuman implements Human {

	public void getColor() {
		// TODO Auto-generated method stub
		System.out.println("黑色人种");

	}

	public void talk() {
		// TODO Auto-generated method stub
		System.out.println("非洲语");

	}

}


package design.factory;

public class YellowHuman implements Human {

	public void getColor() {
		// TODO Auto-generated method stub
		System.out.println("黄色人种");

	}

	public void talk() {
		// TODO Auto-generated method stub
		System.out.println("中国话");

	}

}


package design.factory;

public interface Human {
	
	public void getColor();
	
	public void talk();

}

package design.factory;

public class HumanFactory implements AbstractHumanFactory {

	public <T extends Human> T createHuman(Class<T> c) {
		// TODO Auto-generated method stub
		Human human = null;
		try{
			human = (Human)Class.forName(c.getName()).newInstance();
		}catch(Exception e){
			e.printStackTrace();
		}
		return (T)human;
	}

}
package design.factory;

public class NvWa {
	public static void main(String[] args){
		AbstractHumanFactory yinyanglu = new HumanFactory();
		Human black = yinyanglu.createHuman(BlackHuman.class);
		black.getColor();
		black.talk();
		Human yellow = yinyanglu.createHuman(YellowHuman.class);
		yellow.getColor();
		yellow.talk();
	}

}

优点:良好的封装行,代码结构清晰,扩展性好,屏蔽了产品类,是典型的解耦框架。
使用场景:1.所有需要生成对象的地方都可以使用,不过要考虑是否增加代码的复杂性。
2.需要灵活的,可扩展的框架时可以考虑。
3.可用在异构项目上.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics