• 设计模式-简单工厂模式


    一、定义

    简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

    二、类型

    创建型,但不属于23种GOF设计模式之一

    三、适用场景

    • 工厂类负责创建的对象比较少
    • 客户只需要传入工厂类的参数,对于如何创建对象(逻辑)不关心

    四、优点

    根据外部给定的信息,决定该创建那个类的具体对象。通过传入指定参数就可获取到所需的对象,无需知道其创建细节。

    五、缺点

    工厂集中了所有类的创建逻辑,职责过重,新增产品需要修改工厂类的创建逻辑,违背了开闭原则。

    六、类图

    注:白色虚线箭头没文字描述的表示依赖关系。IDEA中getMethod()方法会被类图认为是method属性。

    七、代码实现

     产品类:

    package com.wms.simplefactory;
    
    public interface Fruit {
        void produce();
    }

     产品的实现类:

    package com.wms.simplefactory;
    
    public class Apple implements Fruit {
        public void produce() {
            System.out.println("生产苹果");
        }
    }
    package com.wms.simplefactory;
    
    public class Banana implements Fruit {
        public void produce() {
            System.out.println("生产香蕉");
        }
    }

    简单工厂类:

    package com.wms.simplefactory;
    
    public class FruitFactory {
        public Fruit getFruit(String fruitName) {
            if ("apple".equals(fruitName)) {
                return new Apple();
            }
            else if ("banana".equals(fruitName)) {
                return new Banana();
            }
            else {
                return  null;
            }
        }
    }

    调用端:

    package com.wms.simplefactory;
    
    public class TestDesignPattern {
        public static void main(String[] args) {
            FruitFactory factory = new FruitFactory();
            Fruit apple = factory.getFruit("apple");
            apple.produce();
            Fruit banana = factory.getFruit("banana");
            banana.produce();
        }
    }

     八、JDK或开源框架中实现

    JDK:

    • Calendar类的createCalendar方法
    • JDBC的加载驱动Class.forName("xxx")
  • 相关阅读:
    词法分析
    HTTP学习笔记
    Servlet入门
    UDP与TCP的区别
    C语言实现血型查询系统
    Mysql的索引、回表查询及覆盖索引浅析
    ReentranLock浅析
    CAS是个什么鬼?
    synchronize和volatile 小知识点总结
    写一个简单的阻塞队列
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10188147.html
Copyright © 2020-2023  润新知