设计模式从零开始——简单工厂模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qixinbruce/article/details/78073775

代码无措就是优?

这个显然不对。代码扩展性强,耦合度低、复用度高和代码能完整实现业务功能同样重要。


面向对象的编程思想指出,好的代码应该是把业务拆分成一个一个独立的模块,模块之间通过某种关系组装到一起就能实现特定的功能。

后期修改或者增加需求的时候,也只需要修改特定模块的内容,不会对整体的代码结构造成影响。


笔者也是java开发的菜鸟一枚,以往大多数编写的代码都缺少面向对象的思想,现在工作中逐渐体现出各种弊端,例如代码难以维护,

实现功能代码量过多、代码逻辑复杂可读性低等等,故现在决定研究设计模式相关知识,把开发工作从本质思想上进行改善。


第一节要学习的设计模式是【简单工厂模式】,本质上这种模式就是把业务进行拆分,可扩展性的功能单独作为一个模块编写,最后再

用一个总体调度的模块,确定具体要执行哪一种功能。

扫描二维码关注公众号,回复: 4880650 查看本文章

比如开发一个计算器的功能。首先需要把界面展现和业务功能完全独立开来。分成不同模块去编写。之后考虑到计算机的基础功能运算有:

加、减、乘、除。就把这四种功能分别写出,最后通过调度工厂类来确定要实现具体哪一种功能。


相比于传统的写法,简单工厂模式的好处在于如果之后需要增加求平方、开方等功能,只要添加相应的方法,在调度类中增加该方法的判断,

其余的功能都不需要进行改动。(页面调整除外)一定程度爱上增加了代码的灵活性,方便后期对功能进行扩展。


以下是简单工厂模式的计算机后台功能部分代码:

1、基础功能类

/**
 * 操作类
 */
public class Operator {
    private double number_A = 0;
    private double number_B = 0;

    public double getNumber_A() {
        return number_A;
    }

    public void setNumber_A(double number_A) {
        this.number_A = number_A;
    }

    public double getNumber_B() {
        return number_B;
    }

    public void setNumber_B(double number_B) {
        this.number_B = number_B;
    }

    public double getResult() {
        double result = 0;
        return result;
    }
}

2、具体功能方法:

public class OperatorAdd extends Operator {
    @Override
    public double getResult() {
        double result = 0;
        result = getNumber_A() + getNumber_B();
        return result;
    }
}

public class OperatorSub extends Operator {
    @Override
    public double getResult() {
        double result = 0;
        result = getNumber_A() - getNumber_B();
        return result;
    }
}

public class OperatorMul extends Operator {
    @Override
    public double getResult() {
        double result = 0;
        result = getNumber_A() * getNumber_B();
        return result;
    }
}

public class OperatorDiv extends Operator {
    @Override
    public double getResult() {
        double result = 0;
        if (getNumber_B() == 0) {
            new Exception("除数不能为0");
        }
        result = getNumber_A() / getNumber_B();
        return result;
    }
}

3、工厂类:

/**
 * 工厂类
 */
public class OperationFactory {
    public static Operator createOperator(String operator) {
        Operator oper = null;
        switch (operator) {
            case "+":
                oper = new OperatorAdd();
                break;
            case "-":
                oper = new OperatorSub();
                break;
            case "*":
                oper = new OperatorMul();
                break;
            case "/":
                oper = new OperatorDiv();
                break;
        }
        return oper;
    }
}

4、具体操作方法:

public class Caculator {
    public static void main(String[] args) {
        Operator operator;
        operator = OperationFactory.createOperator("/");
        operator.setNumber_A(3);
        operator.setNumber_B(4);
        double result = operator.getResult();
        System.out.println(result);
    }
}


猜你喜欢

转载自blog.csdn.net/qixinbruce/article/details/78073775