设计模式之简单工厂模式


前言

大家好,我是练习两年半的Java练习生,最近阅读了《深入浅出设计模式(中文版)》,学习了各种设计模式,所以想出一个专栏和大家分享一下!
如果大家觉得文章还可以,欢迎关注点赞!后续还会陆续更新!!


一、定义

它使用一个工厂类来创建所有的产品对象,而客户端只需要提供一个参数来指定需要创建的产品类型。

二、类图

三、应用

3.1 需求

下面是一个简单工厂模式的示例,假设我们有三种形状:圆形、矩形和正方形,它们都有一个共同的接口 Shape,具体实现分别是 Circle、Rectangle 和 Square。我们使用简单工厂模式来创建这些形状对象。

3.2 分析

我们正常情况下,如果要创建一个对象的话,我们会在客户端直接new。
但这样的话,有以下几个缺点:

  1. 客户端代码需要了解具体的产品类,与产品类之间产生了耦合,不利于系统的扩展和维护。
  2. 如果需要添加新的产品类,就必须修改客户端代码,违反了开闭原则。

为了解决这些问题,可以使用简单工厂模式。

3.3 实现

首先,我们需要创建一个工厂类 ShapeFactory,该类包含一个静态方法 getShape,它根据参数类型创建不同的形状对象。代码如下:

public class ShapeFactory {
    public static Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("circle")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("rectangle")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("square")) {
            return new Square();
        }
        return null;
    }
}

接下来,我们可以在客户端代码中使用 ShapeFactory 来创建形状对象。例如:

public class Client {
    public static void main(String[] args) {
        // 创建一个圆形对象
        Shape circle = ShapeFactory.getShape("circle");
        circle.draw();
        
        // 创建一个矩形对象
        Shape rectangle = ShapeFactory.getShape("rectangle");
        rectangle.draw();
        
        // 创建一个正方形对象
        Shape square = ShapeFactory.getShape("square");
        square.draw();
    }
}

上述代码会输出三种形状的名称,具体的输出内容由各自的 draw 方法实现。在这个示例中,我们通过 ShapeFactory 来创建形状对象,而不需要在客户端代码中直接实例化具体的形状类。这样可以使客户端代码更加简洁,而且将对象的创建过程封装到了工厂类中,提高了代码的可维护性和可扩展性。

四、问题

简单工厂和工厂方法的区别是什么?


五、总结

以上就是今天要讲的内容,本文简单介绍了设计模式中的简单工厂模式。我们需要明白使用该模式前后之间的区别,使用该模式貌似只是把创建对象的代码放到了Factory类中,实则实现了代码的重用、还有客户端与具体类的解耦,我们随时可以修改Factory的方法,而不用修改客户端。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值