Java设计模式-简单工厂模式实现计算器

简单工厂模式:建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

  • 优点是比较好理解,简单易操作。
  • 缺点是类的创建依赖工厂类,如果想要拓展程序,必须对工厂类进行修改,这违反了设计模式的开闭原则(OCP),即对扩展开放,对修改关闭。

 现有一系统提供一个简单计算器,具有简单的加、减、乘、除法的功能,系统可以根据用户的选择实例化相应的操作类。现使用简单工厂模式设计该系统。


类图:

Java设计模式-简单工厂模式实现计算器_第1张图片


 代码实现:

一、Calculating(计算类)类:
package 简单工厂模式;

public abstract class Calculating {
    public double NumberA;
    public double NumberB;
    public abstract double GetResult();
    public void setNumberA(double numberA) {
        NumberA = numberA;
    }

    public void setNumberB(double numberB) {
        NumberB = numberB;
    }
}

二、加法类:

package 简单工厂模式;

public class Addition extends Calculating {
    public double GetResult(){
        return NumberA+NumberB;
    }
}

三、减法类:

package 简单工厂模式;

public class Subtraction extends Calculating{
    public double GetResult(){
        return NumberA-NumberB;
    }

}

四、乘法类:

package 简单工厂模式;

public class Multiplication extends Calculating{
    @Override
    public double GetResult() {
        return NumberA*NumberB;
    }
}

五、除法类:

package 简单工厂模式;

public class Division extends Calculating{
    @Override
    public double GetResult() {
        if(NumberB !=0){
            return NumberA/NumberB;
        }
        else {
            System.out.println("除数需为非零数!!!");
        }
        return 0;
    }
}

六、工厂类:

package 简单工厂模式;

public class CalculatingFactory {
    public static Calculating creatCalculating(String x){
        Calculating calculating=null;
        switch (x){
            case "+": calculating=new Addition(); break;
            case "-": calculating=new Subtraction(); break;
            case "*": calculating=new Multiplication(); break;
            case "/": calculating=new Division(); break;
        }
        return calculating;
    }

}

七、客户端:

package 简单工厂模式;

import java.util.Scanner;

public class Client {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入一个数");
        double x=scanner.nextInt();
        System.out.println("输入符号");
        String ope=scanner.next();
        System.out.println("再输入一个数");
        double y=scanner.nextInt();
        Calculating calculating = CalculatingFactory.creatCalculating(ope);
        calculating.setNumberA(x);
        calculating.setNumberB(y);
        double result = calculating.GetResult();
        System.out.println("结果:"+result);
    }
}

八、运行结果:

Java设计模式-简单工厂模式实现计算器_第2张图片

结语:上述代码是根据类图实现,根据类图中的属性作用域和类之间的关系写出的代码。该代码仅作为实现简单工厂模式的参考,其中不乏违背开发原则的部分。持不同意见者欢迎探讨。 

你可能感兴趣的:(设计模式,简单工厂模式)