一、面向对象思维(OOP)
何为面向对象,我举个例子:在北宋前,人们每当要复印新东西,都需要从新雕刻。当活字印刷术出现后,就省事多了。
活字印刷术作为对象具有属性和方法
1、封装:用的人不需要会雕刻只要认字就行了(便维护)。
2、继承:如果有缺少的字,只需要增加(可扩展)。
3、多态:可以应付各种印刷问题(可复用)。
那么我们使用活字印刷术不就是面向对象了么。
二、简单工厂模式
按照我们对之前面向对象思想的理解,那么我们要提高程序的可维护 、可复用、可扩展。
以实现简单计算器为
将一个简单的功能划分为 业务类、工厂类、逻辑类、磨具类
业务类:
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
Model model=new Model();//引入磨具
try {
System.out.println("请输入数字A");
model.setNumberA(scanner.nextLine());
System.out.println("请输入运算符");
model.setProcess(scanner.nextLine());
System.out.println("请输入数字B");
model.setNumberB(scanner.nextLine());
FactoryDao dao=new FactoryDao();
Model result=dao.operation(model);//工厂加工后的成品
System.err.println(result.toString());
} catch (IllegalArgumentException e) {
// TODO: handle exception
System.out.println("错误!非法参数!");
}
}
工厂:流水线加工在这里我们使用switch作为逻辑判断
public class FactoryDao {
private AlgorithmDao algorithmDao=new AlgorithmDaoImpl();
public Model operation(Model model){
switch (model.getProcess()) {
case "+":
model.setResult(algorithmDao.sum(model.getNumberA(), model.getNumberB()));
break;
case "-":
model.setResult(algorithmDao.reduce(model.getNumberA(), model.getNumberB()));
break;
case "*":
model.setResult(algorithmDao.multiplication(model.getNumberA(), model.getNumberB()));
break;
case "/":
model.setResult(algorithmDao.division(model.getNumberA(), model.getNumberB()));
break;
default:
model.setResult("没有找到"+model.getProcess()+"运算符");
break;
}
return model;
}
}
逻辑处理类声明
public interface AlgorithmDao {
public String sum(Double a,Double b);
public String reduce(Double a,Double b);
public String multiplication(Double a,Double b);
public String division(Double a,Double b);
}
逻辑处理类实现
public class AlgorithmDaoImpl implements AlgorithmDao{
public String sum(Double a, Double b) {
// TODO 自动生成的方法存根
return String.valueOf(a+b);
}
public String reduce(Double a, Double b) {
// TODO 自动生成的方法存根
return String.valueOf(a-b);
}
public String multiplication(Double a, Double b) {
// TODO 自动生成的方法存根
return String.valueOf(a*b);
}
public String division(Double a, Double b) {
// TODO 自动生成的方法存根
try{
if(b==0)throw new IllegalArgumentException();
}catch(IllegalArgumentException ex){
return "除数不能为0!";
}
return String.valueOf(a/b);
}
}
磨具类//这里我进行了类型转换,如果失败会抛出非法字符异常(该异常为运行异常),并在业务类捕获这个异常。
public class Model {
private Double NumberA;
private Double NumberB;
private String Process;
private String Result;
public Double getNumberA() {
return NumberA;
}
public void setNumberA(String numberA) {
NumberA = Double.valueOf(numberA);
}
public Double getNumberB() {
return NumberB;
}
public void setNumberB(String numberB) {
NumberB =Double.valueOf(numberB);
}
public String getProcess() {
return Process;
}
public void setProcess(String process) {
Process = process;
}
public String getResult() {
return Result;
}
public void setResult(String result) {
Result = result;
}
public String toString(){
return NumberA+Process+NumberB+"="+Result;
}
}
以上就是简单工厂模式设计