设计模式-简单工厂模式(SimpleFactory)
简单工厂模式又叫静态工厂模式,,通过定义一个类(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