代码工厂的“魔法配方”:简单工厂模式揭秘

目录

一、什么是简单工厂模式

二、简单工厂模式的构成要素

2.1 工厂类

2.2 产品类

2.3 客户端

三、简单工厂模式代码实现剖析

3.1 代码实现

3.2 代码分析

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

4.1 优点

4.2 缺点

五、简单工厂模式的应用场景

5.1 图形绘制工具

5.2 数据库连接管理

5.3 日志记录器

5.4 文件解析器

六、总结与思考


一、什么是简单工厂模式

        在软件开发的世界里,对象的创建就如同搭建积木,是一个极为常见的操作。在日常开发中,我们常常会使用new关键字来创建对象,这就好比直接拿起积木开始搭建。但是,随着项目规模的不断扩大,这种直接创建对象的方式逐渐暴露出一些问题。

        想象一下,你正在开发一个大型的电商系统,其中涉及到各种不同类型的商品对象,如电子产品、服装、食品等。如果在代码的各个角落都直接使用new来创建这些商品对象,会导致代码的耦合性极高。一旦某个商品类的构造函数发生变化,或者需要更换创建商品对象的逻辑,就不得不四处查找并修改相关的代码,这无疑大大增加了维护的难度。此外,当有多个地方需要创建相同类型的商品对象时,重复的实例化逻辑会使代码变得冗余,就像在不同的地方反复搭建相同的积木结构,既浪费资源又难以管理。

        简单工厂模式就应运而生了。它就像是一个经验丰富的建筑师,专门负责管理和创建对象。简单工厂模式定义了一个工厂类,这个工厂类就如同建筑师手中的设计蓝图,它可以根据传入的参数不同,返回不同类的实例。而这些被创建的实例,通常都具有共同的父类或实现相同的接口,就好比不同类型的积木都遵循相同的拼接规则。

        简单工厂模式的核心,就在于这个工厂类。它集中了对象创建的逻辑,将对象的创建和使用分离开来。客户端在需要对象时,只需告诉工厂类自己的需求,即传入相应的参数,就可以获得所需的对象,而无需关心对象具体是如何创建的。这就好比我们在搭建积木时,只需要告诉建筑师我们想要搭建的结构,建筑师就会按照蓝图为我们准备好合适的积木,我们只需专注于如何将这些积木组合起来,而不用操心积木是如何生产和挑选的。

二、简单工厂模式的构成要素

        简单工厂模式主要包含三个关键要素:工厂类、产品类和客户端,它们相互协作,共同构成了简单工厂模式的核心架构。下面,我将结合代码示例,深入剖析这三个要素在简单工厂模式中的具体作用和实现方式。假设我们正在开发一个图形绘制系统,需要绘制不同类型的图形,如圆形和矩形。

2.1 工厂类

        工厂类是简单工厂模式的核心,就如同一家工厂的核心管理部门,负责实现创建所有产品实例的内部逻辑。在图形绘制系统中,我们可以定义一个ShapeFactory类作为工厂类,它提供一个静态方法createShape,该方法根据传入的参数决定创建哪种具体的图形对象。

public class ShapeFactory {

public static Shape createShape(String shapeType) {

if ("circle".equalsIgnoreCase(shapeType)) {

return new Circle();

} else if ("rectangle".equalsIgnoreCase(shapeType)) {

return new Rectangle();

}

return null;

}

}

        在上述代码中,ShapeFactory类的createShape方法接收一个shapeType参数,通过判断该参数的值,决定创建并返回Circle对象还是Rectangle对象。如果传入的参数既不是 "circle" 也不是 "rectangle",则返回null。这种方式将对象的创建逻辑集中在工厂类中,使得客户端在创建图形对象时,无需了解具体的创建细节,只需提供相应的参数即可。

2.2 产品类

        产品类是简单工厂模式的重要组成部分,它包括抽象产品类和具体产品类。抽象产品类就像是产品的设计蓝图,定义了所有具体产品类需要实现的公共接口;具体产品类则是根据这个蓝图生产出来的实际产品,实现了抽象产品类中定义的接口。

        在我们的图形绘制系统中,Shape接口就是抽象产品类,它定义了一个draw方法,用于绘制图形。而Circle类和Rectangle类则是具体产品类,它们分别实现了Shape接口的draw方法,提供了各自的绘制逻辑。

public interface Shape {

void draw();

}

public class Circle implements Shape {

@Override

public void draw() {

System.out.println("绘制圆形");

}

}

public class Rectangle implements Shape {

@Override

public void draw() {

System.out.println("绘制矩形");

}

}

        在上述代码中,Shape接口定义了draw方法,Circle类和Rectangle类实现了该接口,并提供了各自的draw方法实现。这样,当客户端通过工厂类获取到具体的图形对象后,就可以调用其draw方法进行图形绘制,而无需关心具体的绘制实现。

2.3 客户端

        客户端是简单工厂模式的使用者,它通过工厂类来获取所需的产品实例,并使用这些实例来完成具体的业务逻辑。在图形绘制系统中,客户端可以通过调用ShapeFactory类的createShape方法,传入相应的参数,获取到具体的图形对象,然后调用该对象的draw方法进行图形绘制。

public class Client {

public static void main(String[] args) {

Shape circle = ShapeFactory.createShape("circle");

if (circle != null) {

circle.draw();

}

Shape rectangle = ShapeFactory.createShape("rectangle");

if (rectangle != null) {

rectangle.draw();

}

}

}

        在上述代码中,客户端首先调用ShapeFactory.createShape("circle")获取一个圆形对象,然后判断该对象是否为空,如果不为空,则调用其draw方法绘制圆形。接着,客户端调用ShapeFactory.createShape("rectangle")获取一个矩形对象,并同样判断是否为空后调用其draw方法绘制矩形。通过这种方式,客户端与具体产品类解耦,只与工厂类进行交互,使得代码的灵活性和可维护性得到了提高。

三、简单工厂模式代码实现剖析

        接下来,让我们深入剖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨淅淅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值