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.可用在异构项目上.