简单工厂模式
工厂,生产产品的场所。比如农夫山泉工厂,生产农夫山泉矿泉水、茶π等饮料。矿泉水和茶π都属于饮料,都具有解渴的功能,但是每种饮料给人的感觉是不一样的。矿泉水和茶π在Java中相当于子类,饮料相当于父类。
简单工厂模式,又叫静态工厂模式,在Java中专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。我们将水果园比作一个工厂,可以生产苹果,香蕉等水果。每一个苹果或香蕉都是一个实例,他们的父类都是水果。
下面用Java语言实现简单工厂模式
2.创建Fruit接口、Apple类和Banana类
Fruit(interface):
//水果类 public interface Fruit { public void get(); }
Apple类:
//苹果类 public class Apple implements Fruit{ //实现并重写父类的get()方法 public void get() { System.out.println("采集苹果"); } }
Banana类:
//香蕉类 public class Banana implements Fruit{ //实现并重写父类的get()方法 public void get() { System.out.println("采集香蕉"); } }
3.创建水果园,即工厂类,来生产各种水果
FruitFactory:
注意:这里将工厂类和所创建的子类放在同一个包中,方便调用。
package simpleFactory; //水果园,水果工厂类 public class FruitFactory { /** * @param 不同水果的类名称 * @return 水果类 */ public static Fruit getFruit(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException { /*这里通过反射的方式获取到水果子类的字节码,即类对象,通过类对象的newInstance()方法创建水果子类 实例*/ Class fruit = Class.forName(FruitFactory.class.getPackage().getName()+"."+type); return (Fruit) fruit.newInstance(); } }
4.现在开始生产水果,创建实例,我们另外建立一个类
MainClass:
package simpleFactory; public class MainClass { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { //通过调用工厂类的静态方法getFruit,创建水果的子类实例。 Fruit apple = FruitFactory.getFruit("Apple"); Fruit banana = FruitFactory.getFruit("Banana"); apple.get(); banana.get(); } }
5.结果:
6.总结: