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")
  • 相关阅读:
    给定一个十进制数M,以及需要转换的进制数N。 将十进制数M转化为N进制数
    java计算两条线段交点
    输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m 转载
    全排列 (递归求解+字典序) java 转载
    四大线程池详解(转载)
    生产者消费者简单实现(转载)
    进程 线程通信方式(转载)
    匿名对象和类名为数据类型(java)
    星星(java)
    杨辉三角(java)
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10188147.html
Copyright © 2011-2022 走看看