设计模式——简单工厂模式

本文介绍了简单工厂模式,包括其定义、一个运算符类的实例以及优缺点。通过一个二元运算的抽象类及加减乘除的具体产品类展示了如何运用简单工厂模式。该模式将对象创建与使用分离,方便代码维护,适用于产品类较少且创建逻辑固定的场景。

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

一、含义

简单工厂模式定义了一个“工厂类”,通过静态的方法根据需要生产相应的“具体产品”。

二、举个例子

2.1定义抽象产品类
/**
 * 二元运算抽象类
 */
public abstract class Operator {
    /**
     * 操作数A
     */
   protected double numberA;
    /**
     * 操作数B
     */
    protected double numberB;

    /**
     * 设置操作数
     * @param numberA
     * @param numberB
     */
    public void setNumbers(double numberA,double numberB){
        this.numberA=numberA;
        this.numberB=numberB;
    }

    /**
     * 计算并返回运算结果
     * @return 运算结果
     */
    public abstract double getResult();

}
2.2定义多个具体产品类
/**
 * 加法运算类
 */
 class AddOperator extends Operator{

    @Override
    public double getResult(){
        return super.numberA+super.numberB;
    }
}
/**
 * 加法运算类
 */
class SubOperator extends Operator{

    @Override
    public double getResult(){
        return super.numberA-super.numberB;
    }
}
/**
 * 乘法运算类
 */
 class MulOperator extends Operator{

    @Override
    public double getResult(){
        return super.numberA*super.numberB;
    }
}
/**
 * 除法运算类
 */
 class DivOperator extends Operator{

    @Override
    public double getResult(){
        //这里需要有一个除0判断
        return super.numberA/super.numberB;

    }
}
2.3定义工厂类,通过静态方法获取具体产品类实例
public class OperatorFactory {
    /**
     * 简单工厂模式根据给出的运算符返回相应的运算类
     * @param operator
     * @return
     * @throws Exception
     */
    public static Operator getOperator(String operator) throws Exception{
        switch(operator){
            case "+":{
                return new AddOperator();
            }
           case "-":{
               return new SubOperator();
           }
            case "*":{
                return new MulOperator();
            }
            case "/":{
                return new DivOperator();
            }
            default:{
                throw new Exception("不支持的运算符");
            }
        }
    }
}

三、优缺点·

3.1优点
  1. 创建对象和使用对象解耦,使用者无需关注对象如何创建。
  2. 将创建具体对象的代码封装在工厂类中,便于代码维护。
3.1缺点
  1. 修改或增加创建具体产品的逻辑时需要修改工厂类代码,可扩展性差
  2. 创建产品的工厂方法为静态方法,不能被继承或重写,会造成工厂角色无法形成基于继承的等级结构。

四、使用场景

  1. 客户只知道传入工厂类的参数,对于如何创建对象的逻辑不关心;
  2. 需要创建的具体产品类较少。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值