一、什么是简单工厂模式
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例,通常都具有同样的父类
二、模式中包含的角色及其职责
1.工厂角色(Creator)角色
简单工厂模式的核心,他负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象角色(Product)角色
简单工厂模式所创建的所有对象的父类,他负责描述所有实例所共有的公共接口。
3.具体(Concrete Product)产品
简单工厂模式所创建的具体实例对象
三、简单工厂模式的优缺点
优点:通过工厂类,根据外界给定的信息,自动创建具体类的对象,使得用户在使用时,可以直接根据工厂类去创建所需的实例,而无需了解这些对象的内部组织和创建过程,从而有利于软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,所以在“高内聚”方面做得不好。且不符合开闭原则。
四、主要代码
/**
* @Title: FruitFactory.java
* @Package
* @Descript 多种方法创建Fruit实例
* @author xiaozhi
* @date 2016年11月28日 下午5:00:09
* @version V1.0
*/
public class FruitFactory {
// /**
// * 获得apple实例
// */
// public static Fruit getApple(){
// return new Apple();
// }
//
// /**
// * 获得banana实例
// */
// public static Fruit getBanana(){
// return new Banana();
// }
public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
// 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();
}
}
}
public class Apple implements Fruit{
@Override
public void get() {
System.out.println("采集苹果");
}
}
public class Banana implements Fruit{
@Override
public void get() {
// TODO Auto-generated method stub
System.out.println("采集香蕉");
}
}
public interface Fruit {
public void get();
}
public class MainClass {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
// Fruit apple = new Apple();
// Fruit banana = new Banana();
// apple.get();
// banana.get();
// //通过Fruit工厂创建
// Fruit apple=FruitFactory.getApple();
// Fruit banana= FruitFactory.getBanana();
//
// apple.get();
// banana.get();
Fruit apple=FruitFactory.getFruit("Apple");
Fruit banana=FruitFactory.getFruit("Banana");
apple.get();
banana.get();
}
}