海鸟域生活馆

简单工厂模式:用“傻瓜式”方法制造对象

是不是经常听到各种设计模式的名字,比如“工厂模式”、“单例模式”,然后一脸懵? 别慌,今天咱们就用最简单的方式,彻底搞懂“简单工厂模式”。 它就像一个神奇的玩具工厂,你只需要告诉它想要什么玩具,它就能给你变出来,根本不用你自己费心组装!
简单工厂模式:用“傻瓜式”方法制造对象

大家好,今天给大家聊聊设计模式里的“简单工厂模式”,保证让你听得懂、记得住,还能用得上。

什么是简单工厂模式?

简单工厂模式,顾名思义,就是一个简单的“工厂”。 这个工厂负责生产各种各样的对象, 你不需要知道这些对象是怎么生产出来的,只需要告诉工厂你想要什么,工厂就会给你一个合格的产品。

想象一下,你想要一辆自行车。 如果没有简单工厂模式,你需要自己去买各种零件,然后吭哧吭哧地组装。 但是有了简单工厂,你只需要告诉工厂:“我要一辆自行车”,它就会直接给你一辆组装好的自行车,是不是很方便?

简单工厂的组成

简单工厂模式通常包含三个角色:

1. 抽象产品(Abstract Product): 这是一个接口或者抽象类,定义了所有产品都需要实现的接口。 比如,自行车、汽车、摩托车都属于“交通工具”,那么“交通工具”就是一个抽象产品。

2. 具体产品(Concrete Product): 这是实现了抽象产品接口的具体类。 比如,自行车、汽车、摩托车就是具体的交通工具。

3. 工厂(Factory): 这是简单工厂的核心,它负责创建具体的产品。 你告诉工厂你想要什么,它就给你生产什么。 工厂内部会根据你的要求,创建不同的具体产品。

简单工厂模式的优点和缺点

  • 优点:
  • * 封装性好: 将对象的创建过程封装在工厂类中,客户端不需要知道对象的创建细节。

    * 降低耦合度: 客户端只需要和工厂类交互,不需要和具体产品类交互,降低了客户端和具体产品类的耦合度。

    * 易于扩展: 如果需要增加新的产品,只需要修改工厂类即可,不需要修改客户端代码。

  • 缺点:
  • * 工厂类的职责过重: 工厂类负责创建所有产品,职责过重,容易违反“单一职责原则”。

    * 扩展性有限: 如果产品种类过多,工厂类会变得非常复杂,难以维护。

    * 不符合“开闭原则”: 如果要增加新的产品,需要修改工厂类的代码,违反了“开闭原则”。

    简单工厂模式的应用场景

    简单工厂模式适合以下场景:

  • 客户端不需要知道对象的创建细节。
  • 对象的创建逻辑比较简单。
  • 对象的类型比较少,不会频繁增加新的类型。
  • 举个例子:计算器

    咱们用一个计算器的例子来演示一下简单工厂模式。

    1. 抽象产品:运算类

    ```java

    public abstract class Operation {

    public abstract double getResult(double numberA, double numberB);

    }

    ```

    2. 具体产品:加、减、乘、除运算类

    ```java

    public class OperationAdd extends Operation {

    @Override

    public double getResult(double numberA, double numberB) {

    return numberA + numberB;

    }

    }

    public class OperationSub extends Operation {

    @Override

    public double getResult(double numberA, double numberB) {

    return numberA - numberB;

    }

    }

    public class OperationMul extends Operation {

    @Override

    public double getResult(double numberA, double numberB) {

    return numberA * numberB;

    }

    }

    public class OperationDiv extends Operation {

    @Override

    public double getResult(double numberA, double numberB) {

    if (numberB == 0) {

    throw new IllegalArgumentException("除数不能为0");

    }

    return numberA / numberB;

    }

    }

    ```

    3. 工厂类:运算工厂

    ```java

    public class OperationFactory {

    public static Operation createOperation(String operate) {

    Operation operation = null;

    switch (operate) {

    case "+":

    operation = new OperationAdd();

    break;

    case "-":

    operation = new OperationSub();

    break;

    case "*":

    operation = new OperationMul();

    break;

    case "/":

    operation = new OperationDiv();

    break;

    }

    return operation;

    }

    }

    ```

    4. 客户端代码

    ```java

    public class Client {

    public static void main(String[] args) {

    Operation operation = OperationFactory.createOperation("+");

    double result = operation.getResult(10, 5);

    System.out.println(result); // 输出:15.0

    }

    }

    ```

    怎么样,是不是感觉简单工厂模式其实也没那么难? 它就像一个“傻瓜式”的工具,帮你轻松创建对象。虽然它有缺点,但在一些简单的场景下,还是非常实用的。

    标签:简单工厂模式,设计模式,软件开发,对象创建,工厂类

    兴趣推荐

    • 常用软件运行库:软件应用的基础组件

      3年前: 软件运行库是软件应用程序运行时必需的组件。它们包含一些预先编译好的代码或数据,可以被应用程序调用,从而简化应用程序的开发和提高运行效率。在本文中,我们将探讨什么是软件运行库,以及它们在软件开发和使用中的重要性。

    • VB简介:用简单的语言创造无限可能

      3年前: VB(Visual Basic)是一种面向对象的编程语言,由微软公司开发。它以其简单易学、功能强大的特点被广泛应用于应用程序、数据库及其他软件开发中。想了解有关VB的一切?那就接着往下看吧!

    • 软件源:程序的根基,软件的命脉

      3年前: 软件源,如同程序的根基,软件的命脉,它为软件的构建和运行提供必要的元素。如同农民需要播种的种子,软件开发者也需要从软件源中获取编写软件所需的原材料。

    • 源码程序:构建数字世界的秘密咒语

      3年前: 如同音乐家操纵音符谱写乐章,程序员通过编写源码程序在数字世界中创造万千景象。让我们揭开源码程序的神秘面纱,一探究竟。

    • 软件编程入门:开启你的数字创造之旅

      3年前: 软件编程就像是一场神奇的冒险,它能让你用代码创造出各种各样的数字世界。如果你对软件编程感兴趣,那么现在就是踏上这段旅程的最佳时机!在这篇文章中,我将为你介绍软件编程入门的基本知识,帮助你掌握编程的奥秘,开启你的数字创造之旅。

    • 计算机软件系统:构建数字世界的基石

      3年前: 计算机软件系统就像一座座桥梁,连接着人和机器,让我们的生活更加丰富多彩。从操作系统到办公软件,从游戏软件到人工智能,软件系统无处不在,深刻地影响着我们的工作、学习和娱乐方式。今天,我们就来一起探索计算机软件系统的奥秘,看看它们是如何让我们的数字世界运转起来的。

    • beta是什么意思?是单身的意思吗?

      3年前: beta是什么意思?相信这个词大家都不陌生,可能大家对它的理解也是不尽相同的。“beta”一词在不同的领域有不同的含义,在本文中,我将从多个角度来解析“beta”的含义,并用通俗易懂的语言为你解答。

    • 技术流:用技术制霸世界的黑客们

      3年前: 在现代社会,技术流是一个令人敬畏的存在。他们用令人惊叹的技术来解决问题,创造奇迹,让人们的生活更加便利。技术流们有着强大的技术实力,他们能够将技术运用到各种领域,从软件开发到硬件制造,从网络安全到人工智能,无所不能。

    • 初入数码行业的苦与乐:当error 522成为家常便饭

      3年前: 作为一名刚步入数码行业的新人,我经历了数不尽的error 522,它们就像人生路上的绊脚石,阻碍着我的前进。起初,这些错误让我感到沮丧和迷茫,但我逐渐意识到,它们也是行业里难能可贵的一笔财富,教会了我如何解决问题、如何坚韧不拔。今天,我就和大家分享一下我与error 522的那些“爱恨情仇”。

    • VSS,文件版本系统

      3年前: VSS 是微软开发的一款文件版本管理系统,也是 Windows 操作系统的核心组件之一,主要用于管理和跟踪文件、文件夹及其各个版本的变化,通常服务于软件开发项目。它通过创建一个中央版本库来存储和管理文件,并允许多个用户同时协作编辑和管理这些文件,确保文件的安全性、版本控制和协作编辑。

    • 单例模式:编程世界的独一无二

      2年前: 在编程的世界里,单例模式是一种设计模式,它确保一个类只有一个实例,并且可以从任何地方访问它。就像你们班上那个独一无二的班长,他/她总是在需要的时候出现,处理各种大小事务。

    • 工厂模式:用“模块化”思维,助力高效编程

      2年前: 大家好,我是专注于数字时代写作的专业文章撰稿人,致力于将晦涩的技术转换成生动有趣的文字。今天,我们将探索工厂模式,一个在编程世界中颇受欢迎的设计模式,带你了解它如何在效率、可扩展性和灵活性方面为开发者带来福音!

    • java学习:从入门到精通的进阶指南

      2年前: Java是一种面向对象的高级编程语言,因其跨平台、安全性、简单性、稳定性、兼容性和增长潜力等特点,被广泛用于各种软件开发。如果你想学习Java,那么这篇进阶指南将带你从入门到精通,一览Java的魅力。

    • 设计模式:程序员的神奇工具箱

      2年前: 如果你是一名程序员,那么设计模式对你来说肯定不陌生。设计模式是一套经过验证的解决方案,可以帮助你解决软件开发中经常遇到的问题,让你以更优雅、更简洁的方式编写代码。

    • 策略模式:策略有多高,你就有多能!

      2年前: 策略模式是一种软件设计模式,它可以让你在不改变算法的情况下,改变算法的行为。策略模式可以帮助你解耦算法和它的实现,从而使代码更加灵活和可重用。

    • 观察者模式——每时每刻,都在关注你

      2年前: 在数字时代,我们的一举一动几乎都逃不过观察者的眼睛。无论是网络购物、社交媒体分享,还是使用智能设备,都会留下痕迹。这些数据被收集、分析,用于各种目的,包括营销、广告、甚至监控。观察者模式正在成为数字时代的一种常态,我们应该对此有所了解。

    • 适配器模式:多面手般的桥梁,连接不同设备的万能钥匙

      2年前: 相信大家都有过这样的经历:明明两件电子设备很近,却不能愉快“玩耍”,因为接口不匹配。这种时候,你就需要一个桥梁,来让它们融洽沟通,这个桥梁就是适配器模式。它是软件设计中一种重要的设计模式,可以帮助你将不兼容的接口连接起来,让它们能够协同工作。

    • Java课程攻略:从小白到大神,Java进阶指北

      2年前: Java作为一门热门的编程语言,深受初学者和程序员的喜爱。如果你想掌握Java,踏上编程之旅,这篇Java课程攻略将为你指明方向,助你从小白成长为Java大神。

    • 软件工程:通往成功的黄金之路

      1年前: 各位软件工程师们,准备好在软件工程排名中大放异彩了吗?在这竞争激烈的领域中,我们揭秘了成功之道,让你在代码世界中脱颖而出。

    • Java课程设计:从新手到大师

      1年前: 作为一名软件开发初学者,步入Java课程的大门是一段激动人心的旅程。Java以其强大的功能和广泛的应用而著称,学习Java课程设计将为你开启技术世界的无限可能性。下面,我们将深入Java课程设计的方方面面,带你从新手迈向大师。