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")
  • 相关阅读:
    JavaScript 金字塔
    最短路径—Dijkstra算法和Floyd算法
    Qt编程的一些技巧
    Qt-Creator 加入qwt库
    关于usr/bin/ld: cannot find -lxxx问题总结(Qt编译错误cannot find -lGL)
    根文件系统制作、NFS配置与安装及利用NFS挂载根文件系统
    tslib1.4与Qt4.8.6的交叉编译与移植
    用树莓派做3G无线路由器
    python学习笔记6:面向对象
    pyhton学习笔记5:常用模块:datatime,random,json,re
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10188147.html
Copyright © 2011-2022 走看看