简单工厂模式
1.面向对象编程的好处
可维护、可复用、可扩展、灵活性好。
通过封装、继承、多态、把程序的耦合性降低,用设计模式使得程序更加灵活,容易修改并且易于复用。
- 编程有一原则,就是尽可能的减少重复。
- 业务逻辑和界面逻辑分开
- 紧耦合与松耦合
2.使用计算机小程序的一个例子体会简单工厂模式:
建立一个计算器类类A–体现封装
建立不同的子类代表不同的操作(±*/),继承父类–体现继承
实现一个单独的类做创建实例的过程,根据不同的输入创建不同的实现类对象–简单工厂,体现多态
PS:以后仅更改加法逻辑,就动加法类就好,添加各种复杂运算就创建不同的操作子类继承计算器父类并且修改工厂类。
代码:
计算器父类
package com.clt.simplefactory.entity;
public class Operation {
private double numberA=0;
private double numberB=0;
public double getNumberA() {
return numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
public double getResult(){
double result=0;
return result;
}
}
加法子类
package com.clt.simplefactory.entity;
public class OperationAdd extends Operation {
@Override
public double getResult() {
double result=0;
result=getNumberA()+getNumberB();
return result;
}
}
减法子类
package com.clt.simplefactory.entity;
public class OperationSub extends Operation {
@Override
public double getResult() {
double result=0;
result=getNumberA()-getNumberB();
return result;
}
}
乘法子类
package com.clt.simplefactory.entity;
public class OperationMul extends Operation {
@Override
public double getResult() {
double result=0;
result=getNumberA()*getNumberB();
return result;
}
}
除法子类
package com.clt.simplefactory.entity;
public class OperationDiv extends Operation {
@Override
public double getResult() {
double result=0;
try{
result=getNumberA()/getNumberB();
}
catch (ArithmeticException exc){
System.out.println("除数不能为0");
}
return result;
}
}
简单工厂类
package com.clt.simplefactory.factory;
import com.clt.simplefactory.entity.OperationAdd;
import com.clt.simplefactory.entity.OperationDiv;
import com.clt.simplefactory.entity.OperationMul;
import com.clt.simplefactory.entity.Operation;
public class OperationFactory {
public static Operation createOperate(String oprate){
Operation oper=null;
switch (oprate){
case "+":
oper=new OperationAdd();
break;
case "-":
oper=new OperationDiv();
break;
case "*":
oper=new OperationMul();
break;
case "/":
oper=new OperationDiv();
break;
}
return oper;
}
}
客户端类
package com.clt.simplefactory.client;
import com.clt.simplefactory.entity.Operation;
import com.clt.simplefactory.factory.OperationFactory;
public class Client {
public static void main(String[] args) {
Operation oper;
oper= OperationFactory.createOperate("+");
oper.setNumberA(1);
oper.setNumberB(200);
double result= oper.getResult();
System.out.println(result);
}
}
运行结果
3.参考书
基于《大话设计模式》