zoukankan      html  css  js  c++  java
  • 设计模式-简单工厂模式

    一、定义

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

    二、类型

    创建型,但不属于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")
  • 相关阅读:
    基于事件的异步编程
    基于任务的异步编程
    C#异步编程
    C#2.0
    Mac上安装Brew
    PHP中三维数组转二位数组,并且根据某个字段去重
    LNMP环境安装Laravel之后, 除了根目录下可以访问, 其他都是404页面
    LNMP一键安装包安装的mysql远程连接不上的问题
    CentOS7 安装Redis4.0
    CentOS 7 源码包安装SVN及使用
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10188147.html
Copyright © 2011-2022 走看看