设计模式 - 简单工厂模式 - 基于 Java 实现

本文阐述了简单工厂模式的应用,如何通过工厂类降低类间耦合,以动物行走为例,展示了如何创建不同动物对象。了解其适用场景、代码实现及优缺点,提升软件开发的灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见和工厂有关的设计模式

和工厂相关的设计模式主要有三种,这三种分别是:简单工厂模式,工厂方法模式,抽象工厂模式;
本文主要是对简单工厂模式进行简单的介绍以及总结;

简单工厂模式

为什么使用简单工厂模式?

日常来讲我们在一个类 A 中想要使用其他类 B 的某个成员变量或者成员方法,一般是创建其他类 B 的实例(实例就是对象);

创建 B 的实例的方式就是使用 new 创建,显然在这个时候类 A 与 类 B 之间的耦合度是比较高的;

为了降低类 A 与类 B 之间的耦合度,可以在两个类之间,使用一个工厂,所有的类的实例由工厂进行创建,那么类 A 与 类 B 之间的耦合度将降低了,是一种好的开发方式;

当然存在着比简单工厂模式更加优秀的开发方式;

定义

定义一个工厂类,根据传递参数的不同从而返回不同的实例,被创建的对象实例之间有着共同的父类或者拥有共同实现的接口。

适用场景

1、需要创建的对象比较少
2、客户端不需要创建对象的过程

上面的使用场景这样子设定是因为,创建的对象太多,使得工厂的逻辑变得非常的复杂,这是不可取的,由于工厂类封装了对象的创建过程,所以客户端不需要关系对象是怎么创建出来的。

代码实例简单工厂模式

思考这样的场景,常见的动物都是拥有行走能力的,可以将行走的这个能力进行抽象,抽象到接口中,因为接口是比抽象类更高一级的抽象,习惯上使用接口进行抽象,并且接口是支持多继承的,在日后中也方便进行功能的增加。

对象就是类的实例,对象和实例两者是同一种东西不同的表述;

举一个实际开发当中的例子,使用简单工厂模式创建不同动物类对象:
老虎会行走,狮子会行走,大象也会行走,将这三种动物的行走能力抽象到接口中;

定义动物接口,里面定义一个公开的 run() 方法:

上述场景中的类图

在这里插入图片描述

public interface Animal {
    void run();
}

老虎实现行走功能:

public class Tiger implements Animal{
    @Override
    public void run() {
        System.out.println("老虎在行走...");
    }
}

狮子实现行走功能:

public class Lion implements Animal{
    @Override
    public void run() {
        System.out.println("狮子在行走...");
    }
}

大象实现行走功能:

public class Elephant implements Animal{
    @Override
    public void run() {
        System.out.println("大象在行走...");
    }
}

实现创建动物的工厂类,该工厂类在传递了不同的参数之后,创建出来了不同的动物:

public class AnimalFactory {
    public static final String TAG = "AnimalFactory";

    public static Animal getAnimal(String type) {
        // 这里的比较避免了空指针异常以及比较字符串是忽略大小写的
        if ("Tiger".equalsIgnoreCase(type)) {
            return new Tiger();
        } else if ("Lion".equalsIgnoreCase(type)) {
            return new Lion();
        } else if ("Elephant".equalsIgnoreCase(type)) {
            return new Elephant();
        } else {
            try {
                System.out.println("该动物无法被该动物工厂创建出来");
                throw new IllegalAccessException();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

在上面的 AnimalFactory 工厂类中,传入了不同的动物类型之后,就会创建出来具体的对象;

创建测试代码创建老虎:

// 老虎在行走
Animal tiger = AnimalFactory.getAnimal("Tiger");
tiger.run();

创建测试代码创建狮子:

// 狮子在行走
Animal lion = AnimalFactory.getAnimal("Lion");
lion.run();

创建测试代码创建大象:

// 大象在行走
Animal elephant = AnimalFactory.getAnimal("Elephant");
elephant.run();

整个简单工厂模式中需要的类以及接口总结

1、创建一个抽象类或者接口,这个接口抽象出来多个类的共同方法,比如上面的 Animal 接口,将动物类的行走功能抽象出来;

2、创建抽象类或者接口的多个实现类,比如上面例子中的 Tiger,Lion,Elepgant 类

3、创建对象的简单工厂类,需要什么对象,将参数传递进去,创建出来需要的对象,比如上面的 AnimalFactory 类

4、创建一个测试类,测试是不是可以使用工厂类成功的创建出来需要使用的对象

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

优点:
将对象的创建交给了专门的工厂(工厂类),实现了对象的创建以及使用的分离;

缺点:
工厂类的代码是不够灵活的,因为增加了产品类的时候,工厂类的内部结构是需要修改的;

小结

本文首先介绍了与工厂相关的三种工厂模式,并且使用动物行走的例子实现了一个简单工厂模式(AnimalFactory 这个是简单工厂模式的核心)。在日常的开发工作中,开发人员可以根据业务类型,将相关的类进一步抽象成为接口,使不同的子类实现接口,通过工厂类(AnimalFactory)来实现不同的对象的创建;但是同时需要注意简单工厂模式的优点以及缺点;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值