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

  • 相关阅读:
    关于python做人工智能的一个网页(很牛逼)
    python操作Excel模块openpyxl
    linux环境下安装mysql
    爬虫框架scrapy
    爬虫
    2017.2.6 开工大吉
    C# List集合Group by查询
    Datatable 列查询,统计值
    调用WCF Client客户端测试
    Oracle数据库导入导出命令
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10044578.html
Copyright © 2020-2023  润新知