简单工厂模式

本文介绍了简单工厂模式,包括其定义、结构和代码实现。简单工厂模式通过一个工厂类根据参数创建不同类型的对象,例如在水果的例子中,根据参数创建苹果或橘子的实例。模式的优点是使用方便,但缺点是扩展困难,违反了开闭原则。适用场景为当工厂类负责创建的对象较少,且客户端只需知道参数而不关心创建逻辑时。
摘要由CSDN通过智能技术生成

简单工厂模式

1、定义

由一个工厂对象决定创建出哪一种产品类的实例,简单来说就是根据不同参数获取不同的实例

2、简单工厂模式的结构

简单工厂模式UML图

  • Fruit:抽象的产品类
  • AppleFruit、OrangeFruit:具体的产品类
  • FruitFactory:工厂类

3、代码实现

Fruit:

/**
 * @author: Renaaa
 * @date: 2021-02-18 22:02
 * @description: 简单工厂模式--抽象的水果类(也可以是interface)
 */
public abstract class Fruit {

    /**
     * 买水果
     */
    public abstract void buy();
}

AppleFruit:

/**
 * @author: Renaaa
 * @date: 2021-02-18 22:04
 * @description: 简单工厂模式--具体的实现:苹果类型
 */
public class AppleFruit extends Fruit {
    @Override
    public void buy() {
        System.out.println("买了一些苹果");
    }
}

OrangeFruit:

/**
 * @author: Renaaa
 * @date: 2021-02-18 22:09
 * @description: 简单工厂模式--具体的实现:橘子类型
 */
public class OrangeFruit extends Fruit {
    @Override
    public void buy() {
        System.out.println("买了一些橘子");
    }
}

FruitFactory:

/**
 * @author: Renaaa
 * @date: 2021-02-18 22:03
 * @description: 简单工厂模式--水果工厂
 * 简单工厂模式的优点:
 * 1、只传入一个参数就可以获取具体的对象,不需要其中的过程
 *
 * 简单工厂模式存在的缺点:
 * 1、工厂类的职责过重,每增加一种类型就需要对工厂类进行一次修改
 * 2、违背了开闭原则(类、模块、函数应对扩展开放,对修改关闭)
 */
public class FruitFactory {
    public static Fruit buyFruit(String fruitType) throws Exception {
        if (fruitType.equalsIgnoreCase(FruitEnum.APPLE.toString())) {
            return new AppleFruit();
        } else if (fruitType.equals(FruitEnum.ORANGE.toString())) {
            return new OrangeFruit();
        } else {
            throw new Exception("对不起,暂没有其他品种水果出售");
        }
    }

}

FruitEnum:

/**
 * @author: Renaaa
 * @date: 2021-02-18 22:44
 * @description: 水果枚举类
 */
public enum FruitEnum {
    APPLE,
    ORANGE
}

Client:

/**
 * @author: Renaaa
 * @date: 2021-02-18 22:13
 * @description: 客户端
 */
public class Client {

    public static void main(String[] args) {
        try {
            Fruit fruit = FruitFactory.buyFruit("apple");
            //多态--父类的引用指向子类的对象、接口的引用指向实现类的对象
            fruit.buy();
        } catch (Exception e) {
            System.out.println("没有买到想要吃的水果");
        }
    }
}

运行效果:
运行效果

4、简单工厂模式的优缺点和应用场景

优点:

  • 只传入一个参数就可以获取具体的对象,不需要其中的过程

缺点:

  • 工厂类的职责过重,每增加一种类型就需要对工厂类进行一次修改
  • 违背了开闭原则(类、模块、函数应对扩展开放,对修改关闭)

应用场景:

  • 工厂类负责创建的对象比较少
  • 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值