简单工厂模式属于类的创建型模式,又叫静态工厂方法模式,通过定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
工厂角色:它负责实现创建所有实例的内部逻辑,可以直接被外界调用创建所需产品对象
抽象角色:所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品:具体的实例对象。
缺点就体现在其工厂类上,由于工厂类集中了所有实例的逻辑创建,所有高内聚方面做的并不好,另外当系统中的具体产品类不断增加时,可
能会要求工厂类也要做相应的修改,扩展性并不好
//创建Apple实例类
public class Apple implements Fruit{
/*
* 采集
*/
public void get(){
System.out.println("采集苹果");
}
}
//创建Banana实例类
public class Banana implements Fruit{
/*
* 采集
*/
public void get(){
System.out.println("采集香蕉");
}
}
//创建水果接口,抽出公共的方法
public interface Fruit {
/*
* 采集
*/
public void get();
}
//创建水果工厂,用来创建水果实例,共有三种方式
public class FruitFactory {
第一种方式:直接写获取实例的方法
// /*
// * 获得Apple类的实例
// */
// public static Fruit getApple() {
// return new Apple();
// }
//
// /*
// * 获得Banana类实例
// */
// public static Fruit getBanana() {
// return new Banana();
// }
/*
* get方法,获得所有产品对象
*/
public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
//第二种方式:通过传入的type进行判断,如果存在就返//回相应实例,如果没有就说明不存在该类,返回null;
// if(type.equalsIgnoreCase("apple")) {
// return Apple.class.newInstance();
//
// } else if(type.equalsIgnoreCase("banana")) {
// return Banana.class.newInstance();
// } else {
// System.out.println("找不到相应的实例化类");
// return null;
// }
第三种方式:通过反射进行创建实例
Class fruit = Class.forName(type);
return (Fruit) fruit.newInstance();
三种方式相比较而言,第一种简单粗暴,第二种可以看到具体的实例,第三种扩展性很好,但是不够直观。业界公认第二种方式更好
}
}