直觉地使用计算机机能理解的面向过程的方式去解决问题,
会出现耦合的问题,
是一种短期的方案,
使得程序不容易维护与拓展。
所以应该将面向对象的思想应用到程序设计当中,通过封装、继承、多态将程序的耦合度降低,
运用设计模式增强程序的灵活性,使得它易于修改与复用。
为了培养更好的编程思维与习惯,
先从设计模式的学习与使用开始,
希望有计划地学习设计模式,并且逐渐从了解到化为内用嘤嘤嘤!

一、简单工厂模式:
创建一个专门的类,使它根据情况创建不同类的对象,实现业务逻辑与界面逻辑的分离,降低耦合。

二、以实现简单计算器为例:
创建基础运算抽象类
继承抽象类,实现抽象类中的具体运算方法
创建简单工厂类,由简单工厂类根据情况选定运算方法,即选定需要创建的类对象。

abstract class Operation{
    private double numberA=0;
    private double numberB=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;
    }

    abstract double getResult() throws Exception;
}

/**
 * 继承抽象类,实现一些具体的运算
 */
class Add extends Operation{

    @Override
    double getResult() {
        return getNumberA()+getNumberB();
    }
}

class Less extends Operation{


    @Override
    double getResult() {
        return getNumberA()-getNumberB();
    }
}

class Mul extends Operation {


    @Override
    double getResult() throws Exception{
        if (getNumberB()!=0){
            return getNumberA()/getNumberB();
        }else{
            throw new Exception("除数为零,不合法");
        }
    }
}

public class SimpleFactory {
    public Operation chooseFunc (String operate){
        Operation operation=null;
        switch (operate){
            case "+":
                operation=new Add();
                break;
            case "-":
                operation=new Less();
                break;
            case "/":
                operation=new Mul();
                break;
            default:
                System.out.println("继续扩展方法吧");
                break;
        }
        return operation;
    }
}

class Test{
    public static void main(String[] args) throws Exception {
        double numberA=23;
        double numberB=22;
        String[] operate={"+","-","/"};

        SimpleFactory simpleFactory=new SimpleFactory();
        Operation operation=simpleFactory.chooseFunc(operate[2]);
        operation.setNumberA(numberA);
        operation.setNumberB(numberB);
        System.out.println(operation.getResult());
    }
}