简单工厂模式

来源:互联网 发布:淘宝美工设计培训 编辑:程序博客网 时间:2024/06/01 07:29

       最近在看《大话设计模式》对于每章节的感想和思考想保留下来,所以特此开始写一写关于新学习的设计模式的东西,作为以后的参考。

       简单工厂模式就是说

1. 每个功能的实现,尽量分开,方便后续的继承和需求的增加,尽量松耦合;

2. 在多个功能实现的基础上,增加一个“工厂”作为一个接口,也就是功能的入口。

例子如下:

实现计算器,首选是一个抽象类-操作,作为操作符的父类

package  simplefactory;public abstract class Operation {    private double _numberA = 0;    private double _numberB = 0;        public Operation(double A,double B){    _numberA = A;    _numberB = B;    }        public double getNumberA(){    return _numberA;    }    public void setNumberA(double A){    this._numberA = A;    }    public double getNumberB(){    return _numberB;    }    public void setNumberB(double B){    this._numberA = B;    }    public abstract double getResult();    }

接下来分别是四个功能,加减乘除。

package simplefactory;public class OperationAdd extends Operation{double A = 0;double B = 0;public OperationAdd(double A,double B ){super( A,  B);this.A = A;this.B = B;}public  double getResult(){double result = 0;result = A + B;    return result;}}package simplefactory;public class OperationSub extends Operation {    double A = 0;double B = 0;public OperationSub(double A,double B ){super( A,  B);this.A = A;this.B = B;}public  double getResult(){double result = 0;result = A - B;    return result;}}package simplefactory;public class OperationMul extends Operation {double A = 0;double B = 0;public OperationMul(double A,double B ){super( A,  B);this.A = A;this.B = B;}public  double getResult(){double result = 0;result = A * B;    return result;}}package simplefactory;public class OperationDiv extends Operation {double A = 0;double B = 0;public OperationDiv(double A,double B ){super( A,  B);this.A = A;this.B = B;}public  double getResult(){double result = 0;try {result = A / B;} catch (Exception e) { e.printStackTrace();}    return result;}}
然后是使用一个工程类来做创造实例的过程:

package simplefactory;public class OperationFactory {public static Operation createOperate(String str,double A ,double B){Operation operate = null;switch(str){case "+" :operate = new OperationAdd(A,B);break;case "-" :operate = new OperationSub(A,B);break;case "*" :operate = new OperationMul(A,B);break;case "/" :operate = new OperationDiv(A,B);break;default :System.out.print("not have this operation!");}operate.setNumberA(A);operate.setNumberB(B);return operate;}}

最后是客户端:

package simplefactory;import java.util.ArrayList;import java.util.List;public class OperationClient {public static void main(String[] args) {double A = 15;double B = 5;double result = 0;List<String> str = new ArrayList<>();str.add("+");str.add("-");str.add("*");str.add("/");for(String ss : str){Operation operation = OperationFactory.createOperate(ss,A,B);System.out.println("这个操作符是 : "+ss+", 操作数A是 : "+A+",操作数B是 : "+B);result = operation.getResult();System.out.println("结果是 : "+result);}}}

结果如下:

这个操作符是 : +, 操作数A是 : 15.0,操作数B是 : 5.0结果是 : 20.0这个操作符是 : -, 操作数A是 : 15.0,操作数B是 : 5.0结果是 : 10.0这个操作符是 : *, 操作数A是 : 15.0,操作数B是 : 5.0结果是 : 75.0这个操作符是 : /, 操作数A是 : 15.0,操作数B是 : 5.0结果是 : 3.0

总结:虽然简单工厂模式很简单,同时例子也很简单,但是,对于一个项目来说,一开始就能从松耦合、容易维护、尽量方便复用的角度考虑问题,很重要,思考习惯的改变,很难。


原创粉丝点击