设计模式课程二:工厂模式之简单工厂

设计模式课程二:工厂模式之简单工厂

本次课程来跟小船同学一起学习工厂模式!

工厂模式定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。

我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。

工厂模式分为 简单工厂工厂方法抽象工厂 三种。

简单工厂

如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。

通过一个工厂类负责创建不同的产品,此类中通常提供一个静态方法,根据传入参数的不同来创建不同产品。

简单工厂模式不属于23种设计模式。同时简单工厂在新增产品时,需要修改工厂类,违背了开闭原则

简单工厂模式的优缺点和使用场景

  • 优点

    1. 产品的创建全部委托给工厂类负责,客户端不需要关心产品创建的过程,只需要决定使用哪一种产品类型即可,实现了责任的分割;
  • 缺点

    1. 类的创建工作全部交给一个工厂类负责,一旦逻辑发生异常将影响整个系统;工厂类中的代码过于臃肿;
    2. 产品类型扩展困难,必须修改工厂类的逻辑,当产品类型过多时,可能造成逻辑过于复杂,不易理解和维护;
    3. 工厂类使用静态方法,使得工厂类无法形成基于继承的等级结构。
  • 使用场景

    对于产品种类相对较少的情况,考虑使用简单工厂模式。

简单工厂模式的类图

在这里插入图片描述

简单工厂模式Java示例

// 产品接口,这里模拟产品是船
public interface IBoat {

    void start();
}
// 产品的两个实现,大船和小船
public class BigBoat implements IBoat {

    @Override
    public void start() {
        System.out.println("我是一艘大船,我要启航了..");
    }
}

public class SmallBoat implements IBoat {

    @Override
    public void start() {
        System.out.println("我是一只小船,我要开始划水了..");
    }
}
// 简单工程实现
public class SimpleBoatFactory {

    /**
     * 根据条件生产不同的船
     *
     * @param type 船的类型
     */
    public static IBoat produceBoat(String type) {
        if ("small".equals(type)) {
            return new SmallBoat();
        }

        if ("big".equals(type)) {
            return new BigBoat();
        }

        return null;
    }
}
// 调用
public static void main(String[] args) {

    // 生产一条小船
    SimpleBoatFactory.produceBoat("small").start();

    // 生产一艘大船
    SimpleBoatFactory.produceBoat("big").start();

}

// 运行结果
我是一只小船,我要开始划水了..
我是一艘大船,我要启航了..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值