浅谈设计模式之工厂模式

工厂模式是一种创建型设计模式,它提供了一种封装对象创建过程的方法,通过工厂模式可以隐藏对象的创建细节,调用者只需知道对象的名称即可创建。这种模式提高了代码的可扩展性,但每添加一个新产品需要增加一个工厂类和实现类。文章通过创建Shape接口及其实现类,展示了如何通过工厂类ShapeFactory创建和使用不同形状对象。
摘要由CSDN通过智能技术生成

0 工厂模式的介绍

工厂模式属于创建型模式,是Java中最常见的设计模式之一。工厂模式提供了一种将对象的实例化过程封装在工厂类的方式,通过工厂模式可以屏蔽掉对象的创建过程,对外提供了一种统一的接口来创建不同类型的对象。

优点:

  • 一个调用者想创建一个对象只需要知道其名称即可
  • 可扩展性高,新增一个产品只需要扩展一个工厂类

缺点:

  • 每增加一个产品时都需要增加一个对象实现工厂和实现类,这使得系统中类的数量增加,一定程度上增加了系统类的复杂程度。

1 核心角色

工厂模式中包含了一下几个核心角色:

  • 抽象产品:定义了产品的共同接口或者抽象类。抽象产品可以是所有具体产品的父类或接口,表示所有具体产品共有的方法。
  • 具体产品:实现抽象产品接口,定义具体产品特定的行为。
  • 工厂类:用于声明创建产品的抽象方法,一个工厂内可以声明多个不同产品的抽象方法。
  • 工厂对象:工厂类的实例化对象,负责创建具体产品的对象。

2 实现案例

创建一个 Shape 接口和实现 Shape 接口的实体类。然后定义工厂类 ShapeFactory。
FactoryPatternDemo 类使用 ShapeFactory 来获取 Shape 对象。它向 ShapeFactory 传递信息(CIRCLE / RECTANGLE / SQUARE),以便获取它所需对象的类型。
在这里插入图片描述

2.1 创建接口Shape

public interface Shape {
    void draw();
}

2.2 创建实现接口的实现类

矩形实现类:

public class Rectangle implements Shape{
    @Override
    public void draw() {
        System.out.println("矩形~");
    }
}

圆形实现类:

public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("圆形~");
    }
}

正方形实现类:

public class Square implements Shape{
    @Override
    public void draw() {
        System.out.println("正方形~");
    }
}

2.3 创建工厂类,生成指定产品的实体类对象

public class ShapeFactory {

    //使用getShape方法获取对应的形状类型
    public 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 {
            return new Square();
        }
    }
}

2.4 创建工厂对象,调用具体产品的对象方法

public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();

        //获取圆形的对象,并调用draw方法
        Shape circle = shapeFactory.getShape("CIRCLE");
        circle.draw();

        //获取矩形的对象,并调用draw方法
        Shape rectangle = shapeFactory.getShape("RECTANGLE");
        rectangle.draw();

        //获取正方形的对象,并调用draw方法
        Shape square = shapeFactory.getShape("SQUARE");
        square.draw();
    }
}

3 输出结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值