1、定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
2、代码示例
/** * 抽象人类创造工厂 */ 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 = (T) Class.forName(c.getName()).newInstance(); } catch (Exception e) { System.out.println("人种生成错误! "); } return (T)human; } }
/** * 人类总称 */ public interface Human { //每个人种的皮肤都有相应的颜色 public void getColor(); //人类会说话 public void talk(); }
/** * 黑种人 */ public class BlackHuman implements Human { public void getColor(){ System.out.println("黑色人种的皮肤颜色是黑色的! "); } public void talk() { System.out.println("黑人会说话, 一般人听不懂。 "); } }
/** * 白种人 */ public class WhiteHuman implements Human { public void getColor(){ System.out.println("白色人种的皮肤颜色是白色的! "); } public void talk() { System.out.println("白色人种会说话, 一般都是但是单字节。 "); } }
/** * 黄种人 */ public class YellowHuman implements Human { public void getColor(){ System.out.println("黄色人种的皮肤颜色是黄色的! "); } public void talk() { System.out.println("黄色人种会说话, 一般说的都是双字节。 "); } }
/** * 女娲类 */ 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 blackHuman = YinYangLu.createHuman(BlackHuman.class); blackHuman.getColor(); blackHuman.talk(); //第三次造人, 火候刚刚好, 于是黄色人种产生了 System.out.println(" --造出的第三批人是黄色人种--"); Human yellowHuman = YinYangLu.createHuman(YellowHuman.class); yellowHuman.getColor(); yellowHuman.talk(); } }