阅读 227

玩转设计模式(简单工厂模式)(设计模式工厂模式详解)

序言

今天我们要学习的设计模式叫做简单工厂模式,该设计模式可以解决复杂对象生成产生的问题,也就是当类的构造函数的参数过多,并且参数影响类的的动作时,可以采用简单的工厂模式。

简单工厂模式的介绍

在很多资料中其实如下定义:简单工厂模式其实并不算是一种设计模式,更多的时候是一种编程习惯。它主要是以定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口的方式来方便类的创建。

适用场景

  1. 需要创建的对象较少。

  2. 不关心对象的创建过程。

因为工厂模式的类都是预先设计好的,如果需要创建的对象过多,那么会非常的臃肿和复杂,由于工厂封装了对象的创建过程,所以对象创建过程也不好干预。

简单工厂模式中的角色

  1. 简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

  2. 抽象产品(Product):是简单工厂创建的所有对象的父类,负责描述所有实例共有的公共接口。

  3. 具体产品(ConcreteProduct):是简单工厂模式的创建目标。

我们看上图:

  1. 首先我们有一个生产类的工厂,和抽象产品定义好我们要生产的目标。

  2. 然后实现能够生产符合抽象产品的具体产品方法。

  3. 最后流程就是,工厂接受参数,选择具体产品生产方法,然后得出符合抽象产品的结果。

实际案例

我们按上图思路,看一个案例。

public class Client {
    public static void main(String[] args) {
    }
    //抽象产品
    public interface Product {
        void show();
    }
    //具体产品:ProductA
    static class ConcreteProduct1 implements Product {
        public void show() {
            console.log("具体产品1显示...");
        }
    }
    //具体产品:ProductB
    static class ConcreteProduct2 implements Product {
        public void show() {
            console.log("具体产品2显示...");
        }
    }
        //具体产品:ProductC
    static class ConcreteProduct3 implements Product {
        public void show() {
            console.log("具体产品2显示...");
        }
    }
     class Const {
        static PRODUCT_A = 0;
        static PRODUCT_B = 1;
        static PRODUCT_C = 2;
    }
    static class SimpleFactory {
        public static Product makeProduct(int kind) {
            switch (kind) {
                case Const.PRODUCT_A:
                    return new ConcreteProduct1();
                case Const.PRODUCT_B:
                    return new ConcreteProduct2();
                case Const.PRODUCT_C:
                    return new ConcreteProduct3();
            }
            return null;
        }
    }
}复制代码

总结:

优点:

  1. 工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例。客户端可以免除直接创建产品对象的职责,很方便的创建出相应的产品。工厂和产品的职责区分明确。

  2. 客户端无需知道所创建具体产品的类名,只需知道参数即可。

  3. 也可以引入配置文件,在不修改客户端代码的情况下更换和添加新的具体产品类。

缺点:

  1. 简单工厂模式的工厂类单一,负责所有产品的创建,职责过重,一旦异常,整个系统将受影响。且工厂类代码会非常臃肿,违背高聚合原则。

  2. 使用简单工厂模式会增加系统中类的个数(引入新的工厂类),增加系统的复杂度和理解难度

  3. 系统扩展困难,一旦增加新产品不得不修改工厂逻辑,在产品类型较多时,可能造成逻辑过于复杂

  4. 简单工厂模式使用了 static 工厂方法,造成工厂角色无法形成基于继承的等级结构。


作者:coolFish
链接:https://juejin.cn/post/7035235136136282119

 伪原创工具 SEO网站优化  https://www.237it.com/ 


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐