Java 设计模式 简单工厂模式

一开始的初学者写Java。例如举一个计算器的小程序。

伪代码:

A = read()
B = read()
#输入运算符
C = read()
if(C == +) do something
if(C == -) do something
if(C == *) do something 
if(C == /) do something
or
switch (C)
case "+" do something
case "-" do something
case "*" do something
case "/" do something

这样的代码扩展性和 标准都不达标。
像if 这样的还有判断四次,就很拉。做了几次无用功

好在有 面向对象编程

class opertaion{
  getResult(A,B,C){
    switch C:
     case + :
     case - :
     case * :
  }
}
void main(){
  A = read()
  B = read()
  C = read()
  result = new opertaion().getResult(A,B,C)
}

这样子 有了封装特性 并且,逻辑算数模块与 客户端输入数字模块 分离。总算是稍微好看点了。
但是问题又来了,要是某公司的业务逻辑不只是 加减乘除,可能还有矩阵运算,平方差,开平方,幂运算,对数运算等等,
要在 case 里边加上运算逻辑的代码,而且代码都挤在一起,忘记不小心改错其他代码,那分分钟是炒鱿鱼呀
例如:
switch C:{
     case + :  return result = A+B
     case - : return result = A-B
     case * :return result = A*B
     case 对数 : do something
     case 幂:do something
     case 平方差 :do something
     case  矩阵 :do something
  }
太紧凑了。所以得 松耦合  一下!

松耦合

利用继承和多态: 
class operation
  private A=0
  private B=0
  public getA()
  public getB()
  public SetA(A)
  public SetB(B)
  public getResult()
class operationAdd extend operation //加法
  @override
   public getResult(){
  return getA()+getB()
}
class operationSub extend operation //减法
  @override
   public getResult(){
  return getA()-getB()
}
...................其他类似
这样子既 分开了运算逻辑,达到松耦合。
再增加其他运算逻辑的时候,只需 而外添加一个类继承 operation 实现 方法即可。
而且还符合 工厂模式! 也就是我需要哪个运算功能,就给我哪个功能即可,不用像前边一样一股脑的都给我了

工厂模式:(顾名思义就是 生产某个东西即可)

class operationFactory{
  public Operation createOperation(String C){
    Operation oper = null
    switch C:
     case + :  oper = new operationAdd (); 
     case - : oper = new operationSub(); 
     case * : oper = new operationXX (); 
     case 对数 : oper = new operationXX (); 
     case 幂: oper = new operationXX (); 
     case 平方差 : oper = new operationXX (); 
     case  矩阵 : oper = new operationXX (); 
  }
return oper;
}
这样子当我需要加法的时候,
main(){
  //先生产一个加法功能
  Operation oper = OperationFactory.createOperate(C);
  //再添加我要运算的值
  oper .setA(A)
  oper .setB(B) 
  //返回结果
  result = oper.getResult()
}

\color{#228B22}{java 学习小总结,不对之处,欢迎大神们喷我。可以的话顺手点个赞吧~~!}
\color{red}{警: 禁止抄袭,转载说明出处 }

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