简单工厂模式
Posted 牛哄哄的柯南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式相关的知识,希望对你有一定的参考价值。
简单工厂模式
引入问题
用任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。
【普通代码】
这样的程序虽然解决了问题,但是不容易维护,不容易扩展,更不容易复用。从而达不到高质量代码的要求。
说明:图片来源于大话设计模式,仅供学习使用。
【工厂模式代码】
题目中提到使用面向对象,那么面向对象的三大特征分别是封装、继承和多态。
我们可以尝试把计算类封装下,并且将不同的运算分来写,做到解耦,并且运用工厂模式。
架构如下图:
【Java】
运算类
package keafmd.accumulate.designmode.factorymode;
/**
* Keafmd
*
* @ClassName: Operation
* @Description: 运算父类
* @author: 牛哄哄的柯南
* @date: 2022-06-22 19:10
*/
public 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 double getResult() throws Exception
double res = 0;
return res;
加法类
package keafmd.accumulate.designmode.factorymode;
/**
* Keafmd
*
* @ClassName: OperationAdd
* @Description: 加运算
* @author: 牛哄哄的柯南
* @date: 2022-06-22 19:13
*/
public class OperationAdd extends Operation
@Override
public double getResult()
return getNumA() + getNumB();
减法类
package keafmd.accumulate.designmode.factorymode;
/**
* Keafmd
*
* @ClassName: OperationSub
* @Description: 减运算
* @author: 牛哄哄的柯南
* @date: 2022-06-22 19:18
*/
public class OperationSub extends Operation
@Override
public double getResult()
return getNumA() - getNumB();
乘法类
package keafmd.accumulate.designmode.factorymode;
/**
* Keafmd
*
* @ClassName: OperationMul
* @Description: 乘运算
* @author: 牛哄哄的柯南
* @date: 2022-06-22 19:19
*/
public class OperationMul extends Operation
@Override
public double getResult()
return getNumA() * getNumB();
除法类
package keafmd.accumulate.designmode.factorymode;
/**
* Keafmd
*
* @ClassName: OperationDiv
* @Description: 除运算
* @author: 牛哄哄的柯南
* @date: 2022-06-22 19:20
*/
public class OperationDiv extends Operation
@Override
public double getResult() throws ArithmeticException
if(getNumB()==0)
throw new ArithmeticException("除数不能为0!");
return getNumA() / getNumB();
简单工厂类
package keafmd.accumulate.designmode.factorymode;
/**
* Keafmd
*
* @ClassName: OperationFactory
* @Description: 计算工厂
* @author: 牛哄哄的柯南
* @date: 2022-06-22 19:23
*/
public class OperationFactory
public static Operation createOperation(String operate) throws Exception
Operation operation = null;
switch (operate)
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/":
operation = new OperationDiv();
break;
default:
throw new Exception("输入运算符不合法!");
return operation;
客户端
package keafmd.accumulate.designmode.factorymode;
import java.util.Scanner;
/**
* Keafmd
*
* @ClassName: ComputingClient
* @Description: 计算客户端
* @author: 牛哄哄的柯南
* @date: 2022-06-22 19:29
*/
public class ComputingClient
public static void main(String[] args) throws Exception
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个数:");
double a = sc.nextDouble();
double b = sc.nextDouble();
System.out.println("请输入运算符(+,-,*,/):");
String s = sc.next();
Operation operation = OperationFactory.createOperation(s);
operation.setNumA(a);
operation.setNumB(b);
System.out.println("运算结果为:" + operation.getResult());
效果
请输入两个数:
2
3
请输入运算符(+,-,*,/):
*
运算结果为:6.0
Process finished with exit code 0
以上就是简单工厂模式的全部内容
版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/
看完如果对你有帮助,感谢点击下面的点赞支持!
[哈哈][抱拳]
加油!
共同努力!
Keafmd
以上是关于简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式从青铜到王者第五篇:创建型模式之简单工厂模式( Simple Factory Pattern )