1.简单工厂模式

实现计算器功能

0.UML类图

1.运算抽象类,提供基本属性和虚方法

**
 * @author makex
 * @note 运算抽象类,提供基本属性和虚方法
 * @tip  抽象类就是来被继承的,可以在子类中重写方法
 * @create 2017-06-12
 */
public abstract class Operation {
    private double numA;
    private double numB;

    public double getNumA() {
        return numA;
    }

    public void setNumA(double numA) {
        this.numA = numA;
    }

    public double getNumB() {
        return numB;
    }

    public void setNumB(double numB) {
        this.numB = numB;
    }

    public abstract double getResult();
}

2.四种具体子类重写父类中的计算方法

/**
 * @author makex
 * @note 具体的加法子类
 * @create 2017-06-12
 */
public class OperationAdd extends Operation{
    @Override
    public double getResult(){
        return  getNumA() + getNumB();
    }
}
/**
 * @author makex
 * @note 具体的减法子类
 * @create 2017-06-12
 */
public class OperationSub extends Operation{
    @Override
    public  double getResult(){
        return getNumA() - getNumB();
    }
}
/**
 * @author makex
 * @note 具体的乘法子类
 * @create 2017-06-12
 */
public class OperationMul extends Operation {
    @Override
    public double getResult() {
        return getNumA() * getNumB();
    }
}
/**
 * @author makex
 * @note 具体的除法子类
 * @create 2017-06-12
 */
public class OperationDiv extends Operation {
    @Override
    public double getResult() {
        if(getNumB() == 0){
            System.out.println("除数不能为0");
            return 0;
        }
        return getNumA() / getNumB();
    }
}

3.简单工厂类,根据运算符创建子类对象,利用多态实现数值的计算

/**
 * @author makex
 * @note 简单运算工厂类
 * @create 2017-06-12
 */
public class OperationFactory {
    public static Operation createOperation(String operate){
        Operation oper = null;
        switch (operate){
            case "+":
                oper = new OperationAdd();
                break;
            case "-":
                oper = new OperationSub();
                break;
            case "*":
                oper = new OperationMul();
                break;
            case "/":
                oper = new OperationDiv();
                break;
        }
        return oper;

    }
}

4.测试类

/**
 * @author makex
 * @note 工厂模式测试类
 * @tip 只需要输入运算符,工厂就能实例化出合适的对象,通过多态,计算具体结果
 * @create 2017-06-12
 */
public class TestClass {
    public static void main(String[] args) {
        Operation oper = OperationFactory.createOperation("+");
        oper.setNumA(1);
        oper.setNumB(2);
        System.out.println(oper.getResult());
    }
}

posted @ 2017-06-12 15:04  桃源仙居  阅读(115)  评论(0)    收藏  举报