设计模式学习:简单工厂模式

文章介绍了简单工厂模式,这是一种类创建型模式,用于根据参数返回不同类的实例。在示例中,加减乘除运算类继承自运算基类,通过工厂类创建这些实例。简单工厂模式的优点是客户端无需直接创建对象,缺点是违反了开闭原则,增加新产品需修改工厂类。
摘要由CSDN通过智能技术生成

 简单工厂模式定义:简单工厂模式又称为静态工厂方法模型,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式优点 : 只需传入正确的参数 , 就可以获取需要的对象 , 无需知道创建细节 ;
工厂类中有必要的判断逻辑 , 可以决定根据当前的参数创建对应的产品实例 , 客户端可以免除直接创建产品对象的责任 ;通过该模式实现了对创建实例和使用实例的责任分割 ;
提供专门的工厂类用于创建对象 , 客户端无需知道所创建的产品类的类名 , 只需要知道对应产品类的参数即可创建对象实例 ;


简单工厂模式缺点 : 工厂类职责过重 , 如果要增加新的产品 , 需要修改工厂类的判断逻辑 , 违背 " 开闭原则 " ;
7大设计原则 , 不能全部遵守 , 也不能不遵守 , 需要平衡功能和系统复杂度 , 找到最合适的一个点 ;

类图:

加减乘除继承自运算类,工厂类关联运算类

demo:

public class Operation {
    private double numberA;
    private double numberB;

    public double getResult() throws Exception {
        return 0;
    }

    public double getNumberA() {
        return numberA;
    }

    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }

    public double getNumberB() {
        return numberB;
    }

    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }
}
public class OperationAdd extends Operation{
    @Override
    public double getResult() {
        double result = 0;
        result = getNumberA()+getNumberB();
        return result;
    }
}
public class OperationSub extends Operation{
    @Override
    public double getResult() {
        double result = 0;
        result = getNumberA() - getNumberB();
        return result;
    }
}
public class OperationMul extends Operation{
    @Override
    public double getResult() {
        double result = 0;
        result = getNumberA() * getNumberB();
        return result;
    }
}
public class OperationDiv extends Operation{
    @Override
    public double getResult() throws Exception {
        double result;
        if (getNumberB() == 0) {
            throw new Exception("除数不能为0!");
        }

        result = getNumberA() / getNumberB();
        return result;
    }
}
public class OperationFactory {

    public static Operation createOperate(String operate) {
        Operation operation = null;
        switch (operate) {
            case "+":
                operation = new OperationAdd();
                break;
            case "-":
                operation = new OperationSub();
                break;
            case "*":
                operation = new OperationMul();
                break;
            case "/":
                operation = new OperationDiv();
                break;
            default:
                break;
        }

        return operation;
    }
}
public class Main {
    public static void main(String[] args) throws Exception {
        Operation operation;
        operation = OperationFactory.createOperate("+");
        operation.setNumberA(1);
        operation.setNumberB(2);
        double result = operation.getResult();
        System.out.println("result == " + result);
    }
}

加减乘除继承自运算类,要增加其他运算只需要再新创建一个类就好了,不会影响到其他的运算类,并且我们需要什么运算只需将操作符提供给工厂,由工厂创建对象,不需要直接创建,nice~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值