工厂方法模式分为三种:1、普通工厂模式 2、多个工厂模式 3、静态工厂模式
1、定义一个接口类
package com.dairuijie.factory; /** * 动物接口 * @author DRJYY * */ public interface Anaimal { void run();//动物特性之一动eg:跑 }
2、定义实现接口的类
package com.dairuijie.factory; /** * 狗 * @author DRJYY * */ public class Dog implements Anaimal{ @Override public void run() { System.out.println("I am dog"); } }
package com.dairuijie.factory; /** * 猫 * @author DRJYY * */ public class Cat implements Anaimal { @Override public void run() { System.out.println("I am cat"); } }3、定义工厂类
package com.dairuijie.factory; /** * 普通工厂模式 这个就是工厂类负责通过type 来生产对应的对象 缺点:如果传递的字符串出错,则不能正确创建对象 * * @author DRJYY * */ public class Factory { public Anaimal produce(String type) { if ("dag".equals(type)) { return new Dog(); } else if ("cat".equals(type)) { return new Cat(); } else { return null; } } }
/** * 多个工厂方法模式 针对普通方法改进防止输入字符串出错 * * @author DRJYY * */ public class Factory { public Anaimal dogProduce() { return new Dog(); } public Anaimal catProduce() { return new Cat(); } }
/** * 静态工厂方法模式 * * 针对多个工厂方法模式 改进使用静态方法直接调用不需要再去new 对象 * @author DRJYY * */ public class Factory { public static Anaimal dogProduce() { return new Dog(); } public static Anaimal catProduce() { return new Cat(); }
普通工厂测试:
package com.dairuijie.factory; public class FactoryTest { public static void main(String[] args) { Factory factory = new Factory(); Anaimal dog = factory.produce("dag"); Anaimal cat = factory.produce("cat"); dog.run(); cat.run(); } }
多个工厂测试:
package com.dairuijie.factory; public class FactoryTest { public static void main(String[] args) { Factory factory = new Factory(); Anaimal dog = factory.dogProduce(); Anaimal cat = factory.catProduce(); dog.run(); cat.run(); } }
静态工厂模式测试:
package com.dairuijie.factory; public class FactoryTest { public static void main(String[] args) { Anaimal dog = Factory.dogProduce(); Anaimal cat = Factory.catProduce(); dog.run(); cat.run(); } }
总结:工厂模式适合:凡是出现了大量的不同的对象需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。