public interface Factory { public LeiFeng CreateLeiFeng(); }
public class LeiFeng { public void sweep() { System.out.println("sweep"); } public void wash() { System.out.println("wash"); } public void buyRice() { System.out.println("buy rice"); } }
/** * Created by tian on 16-5-29. * <p> * 定义一个用于创建对象的接口,让子类决定实例化哪一个对象。工厂方法使一个类的实例化延迟到其子类 * 工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的, * 也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。想要增加新功能,原来是修改工厂类, * 现在是修改客户端。 */ public class Main { public static void main(String[] args) { //简单工厂模式 LeiFeng studentA = SimpleFactory.CreateLeiFeng("xuesehng"); LeiFeng zhiyuanzhe = SimpleFactory.CreateLeiFeng("zhiyuanzhe"); //工厂模式 Factory factory = new UnderGraduateFactory(); LeiFeng xuesheng = factory.CreateLeiFeng(); } }
/** * Created by tian on 16-5-29. * //简单工厂的实现方法 */ public class SimpleFactory { public static LeiFeng CreateLeiFeng(String type){ LeiFeng leiFeng = null; switch (type){ case "xuesheng": leiFeng = new UnderGraduate(); break; case "zhiyuanzhe": leiFeng = new Volunteer(); } return leiFeng; } }
public class UnderGraduate extends LeiFeng{ }
public class UnderGraduateFactory implements Factory { @Override public LeiFeng CreateLeiFeng() { return new UnderGraduate(); } }
public class Volunteer extends LeiFeng { }
public class VolunterFactory implements Factory{ @Override public LeiFeng CreateLeiFeng() { return new Volunteer(); } }