简单工厂模式又叫静态工厂模式,,通过定义一个类(FruitFactory)来负责创建其他类的实例,被创建的实例通常都具有相同的父类(Fruit)。
角色和职责:
1.工厂角色(Factory)-FruitFactory:
简单工厂模式的核心。它负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象产品(Product)-Fruit:
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.具体产品(concrete product)-Banana、Apple:
简单工厂模式所创建的具体实例对象
UML图:
具体代码:
/**
* 水果接口类
*/
public interface Fruit {
public void pick();
}
/**
* 苹果实现类
*/
public class Apple implements Fruit{ @Override
public void pick() {
System.out.println("采摘苹果");
}
}
/**
* 香蕉实现类
*/
public class Banana implements Fruit{
@Override
public void pick() {
System.out.println("采摘香蕉");
}
}
/**
* 水果生产类
*/
public class FruitFactory { public static Fruit getFruit(String fruitName) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
//原简单工厂模式写法
// if(fruitName.equalsIgnoreCase("apple")){
// return new Apple();
// }else if(fruitName.equalsIgnoreCase("banana")){
// return new Banana();
// }
// return null;
//简单工厂模式优化后的代码如下:
Class cls = Class.forName(fruitName);
return (Fruit) cls.newInstance();
}
}
public class Main {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
Fruit apple = FruitFactory.getFruit("Apple");//生产苹果
Fruit banana = FruitFactory.getFruit("Banana");//生产香蕉
apple.pick();
banana.pick();
}
}
结果:
采摘苹果
采摘香蕉
优缺点:
优:在这个模式下,工厂类(FruitFactory)是整个模式的核心,根据外界给定的信息,决定用哪个具体类对象。
缺:高内聚,扩展性差,多一个水果时,需要去创建。
项目源码:https://github.com/qjm201000/design_pattern_simpleFactory.git