简单工厂模式:用“傻瓜式”方法制造对象
大家好,今天给大家聊聊设计模式里的“简单工厂模式”,保证让你听得懂、记得住,还能用得上。
什么是简单工厂模式?
简单工厂模式,顾名思义,就是一个简单的“工厂”。 这个工厂负责生产各种各样的对象, 你不需要知道这些对象是怎么生产出来的,只需要告诉工厂你想要什么,工厂就会给你一个合格的产品。
想象一下,你想要一辆自行车。 如果没有简单工厂模式,你需要自己去买各种零件,然后吭哧吭哧地组装。 但是有了简单工厂,你只需要告诉工厂:“我要一辆自行车”,它就会直接给你一辆组装好的自行车,是不是很方便?
简单工厂的组成
简单工厂模式通常包含三个角色:
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课程设计的方方面面,带你从新手迈向大师。