简单工厂设计模式

案例:计算器程序的编写

第一种:

import java.util.Scanner;

public class Operation {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        double num1 = input.nextDouble();
        System.out.println("请输入运算符号:");
        String operate = input.next();
        System.out.println("请输入第二个数字:");
        double num2 = input.nextDouble();
        double sum = 0; // 保存结果
        switch (operate) {
        case "+":
            sum = num1 + num2;
            break;
        case "-":
            sum = num1 - num2;
            break;
        case "*":
            sum = num1 * num2;
            break;
        case "/":
            sum = num1 / num2;
            break;
        }
        System.out.println("结果是:" + sum);
    }
}
计算器

第二种:

/**
 * 运算类
 */
public class Operate {

    public static double getOperate(double num1, String operate, double num2) {
        double sum = 0; // ąŁ´ć˝ášű
        switch (operate) {
        case "+":
            sum = num1 + num2;
            break;
        case "-":
            sum = num1 - num2;
            break;
        case "*":
            sum = num1 * num2;
            break;
        case "/":
            sum = num1 / num2;
            break;
        }
        return sum;
    }

}
运算类
import java.util.Scanner;

public class Operation {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        double num1 = input.nextDouble();
        System.out.println("请输入运算符号:");
        String operate = input.next();
        System.out.println("请输入第二个数字:");
        double num2 = input.nextDouble();
        // 获取结果
        double sum = Operate.getOperate(num1, operate, num2);
        System.out.println("结果是:" + sum);

    }
}
测试类

第三种:

01.设置一个运算类接口

02.然后四种运算方法分别实现此接口

03.在写出运算类和测试类

/**
 *  无论是加减乘除 还是平方,开根等
 *  都是运算
 *  接口就是规定一种行为! 不关注实现!
 *  就写一个运算的方法!
 *  
 */
public interface Operation {

    double getResult(double num1, double num2);

}
总接口
public class Addtion implements Operation {

    @Override
    public double getResult(double num1, double num2) {
        return num1 + num2;
    }

}
加法
public class Minus implements Operation {

    @Override
    public double getResult(double num1, double num2) {
        return num1 - num2;
    }

}
减法
public class Multiplication implements Operation {

    @Override
    public double getResult(double num1, double num2) {
        return num1 * num2;
    }

}
乘法
public class Division implements Operation {

    @Override
    public double getResult(double num1, double num2) {
        return num1 / num2;
    }

}
除法
import cn.bdqn.third.impl.Addtion;
import cn.bdqn.third.impl.Division;
import cn.bdqn.third.impl.Minus;
import cn.bdqn.third.impl.Multiplication;
import cn.bdqn.third.impl.Operation;

/**
 * 运算类
 * 
 * 
 * 
 *  真正运算的是 我们的接口还是  实现类!!!!   
 *  肯定是实现类!
 *  言外之意,我们需要实例化 实现类 才能实现运算的功能!
 *  这么多实现类 都需要 实例化!
 *  
 *  01.我们有继承关系!
 *  02.有多个实现类需要实例化
 *  03.首选我们的工厂设计模式
 *  
 *  虽然代码量增加! 但是我们程序的扩展性和复用性强了!耦合度降低!
 *  
 */
public class OperateFactory {

    /**
     * 
     * @param operate  用户传递过来的运算符号
     * @return  根据用户的运算符号  返回不同的算法
     */
    public static Operation getOperate(String operate) {
        // 父类引用指向子类的对象
        Operation operation = null;
        switch (operate) {
        case "+":
            operation = new Addtion();
            break;
        case "-":
            operation = new Minus();
            break;
        case "*":
            operation = new Multiplication();
            break;
        case "/":
            operation = new Division();
            break;
        }
        return operation;
    }

}
运算类
import java.util.Scanner;

import cn.bdqn.third.impl.Operation;

public class OperationDemo {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        double num1 = input.nextDouble();
        System.out.println("请输入运算符号:");
        String operate = input.next();
        System.out.println("请输入第二个数字:");
        double num2 = input.nextDouble();
        Operation operation = OperateFactory.getOperate(operate);
        System.out.println(operation.getResult(num1, num2));

    }
}
测试类
原文地址:https://www.cnblogs.com/wwlw/p/7591338.html