简单工厂设计模式
Posted 我可不是隔壁的老王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂设计模式相关的知识,希望对你有一定的参考价值。
案例:计算器程序的编写
第一种:
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)); } }
以上是关于简单工厂设计模式的主要内容,如果未能解决你的问题,请参考以下文章