设计模式-简单工厂模式(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

posted @ 2018-11-30 16:32  qjm201000  阅读(141)  评论(0编辑  收藏  举报