• 二、简单工厂模式


    1、基本概念

    简单工厂设计模式属于创建型模式,简单工厂设计模式并不属于GoF的23种设计模式里面,但是因为其在某些场景下使用起来非常方便,因此也是一门必须掌握的模式。创建型设计模式解决的就是对象的创建问题,对象创建在Java中不就是new吗,这有什么问题呢?
    new关键字直接涉及到了具体的类(接口和抽象类是不能实例化的),因此这就导致了一旦客户端代码中依赖的某个第三方类发生了改变,那么客户端代码也必须改变,代码的耦合度变高,不符合开闭原则
    因此通过简单工厂模式,客户端不需要直接通过new关键字来创建对象,而是通过一个简单工厂类来进行对象的实例化,简单工厂中封装了产品类的创建过程,客户端只需要和简单工厂类做好约定即可,产品类的创建细节完全屏蔽于简单工厂类中,可以实现客户端代码和产品类的解耦。

    2、简单工厂模式角色

    简单工厂中包含如下几个角色:

    1. 抽象产品类,是简单工厂创建的所有产品的父类,之所以进行产品的抽象,是因为要尽可能面向接口编程。
    2. 具体产品类,具体产品是抽象产品的具体实现。
    3. 简单工厂类,简单工厂中封装了具体产品类的创建细节,并提供一系列交互规则,客户端代码只需要使用正确的交互规则和简单工厂交互,即可获得自己需要的产品,而不需要关注具体产品的创建细节。只要交互规则不变,客户端代码就不要改变,具体产品的创建细节可以随意改变。
    4. 客户端类,使用简单工厂获取产品类对象

    3、简单工厂模式类图

    在这里插入图片描述

    4、代码实现

    1. AbstractProduct
    package simplefactory;
    
    public abstract class AbstractProduct {
        /**
         * @return 返回产品的用法
         */
        public abstract String getProductUsage();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. ConcreteProduct
    package simplefactory;
    
    public class ConcreteProductA extends AbstractProduct {
    
        @Override
        public String getProductUsage() {
            return "ConcreteProductA的使用方法";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    package simplefactory;
    
    public class ConcreteProductB extends AbstractProduct {
    
        @Override
        public String getProductUsage() {
            return "ConcreteProductB的用法";
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. SimpleFactory
    package simplefactory;
    
    public class SimpleFactory {
        public static AbstractProduct createProduct(String type) {
            switch (type) {
                case "ConcreteProductA":
                    return new ConcreteProductA();
                case "ConcreteProductB":
                    return new ConcreteProductB();
                default:
                    throw new RuntimeException("未知产品类型");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. Client
    package simplefactory;
    
    public class Client {
        public static void main(String[] args) {
            AbstractProduct product = SimpleFactory.createProduct("ConcreteProductA");
            System.out.println(product.getProductUsage());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5、简单工厂模式的优缺点

    1. 优点

    简单工厂模式,故名思义就是简单,在产品类不是很多的时候,使用简单工厂可以很好的将产品类的创建和客户端代码解耦合,只要客户端和简单工厂创建产品的接口约定不变,那么产品类的创建细节可以随意改变。

    1. 缺点

    简单工厂模式最大的问题就是扩展性问题,如果产品类别比较少,或者类别数目变化不大,那么使用简单工厂模式可以很好的对程序解耦,但是一但需要增加或者减少大量的产品类的时候,必须要修改简单工厂的代码,这不符合程序的开闭原则,同时简单工厂的职责过重,一个工厂类负责多个产品的创建,也违背了单一职责原则

  • 相关阅读:
    高并发下秒杀商品,你必须知道的9个细节
    Android的handler消息收发处理——子线程与主线程(UI线程)间的通信
    小美的数组操作2---牛客周赛 Round 11
    南山区民政局关于开展2022年度南山区社会组织等级评估工作的通知
    工具:Linux 应急检测脚本
    Jenkins清理构建(自动)
    Android 12.0 ota升级之SettingsProvider新增和修改系统数据相关功能实现
    泰勒多项式
    VMware16虚拟机添加硬盘(磁盘)和挂载硬盘(磁盘)
    MATLAB 匿名函数
  • 原文地址:https://blog.csdn.net/xichengfengyulou/article/details/127658484