原本自己开发了各种web、移动应用,还开源了几个项目,觉得自己能力不错了,可最近在研究Android源码的时候才发现,自己某些方面的缺失。而这种缺失就是设计模式。起初对于各种设计模式都有过了解,但也只是略知大概的概念皮毛,所以在看源码的时候发现,就像是在看天书一般,令人难受,所以现在打算重头对各种设计模式整理一遍,当给自己敲个警钟---路还很长,自己还不够强。
一、引
现在先从简单工厂模式入手,简单工厂模式一般来说是学习设计模式的第一种模式,难度就跟它的名字一样,简单。虽然简单工厂模式看起来学起来很简单,但是其中却是对面向对象编程很好的理解和诠释。面向对象编程的三个特性是封装、继承和多态,接下来就来看看一个简单工厂模式是怎么运用到这三大特性的。
二、问题
直接贴源码未免有些不妥,所以我们先抛出一个问题,仔细思考一下这个问题:如果让你实现一个计算器程序,你会怎么设计?
三、理解
很多人会说很简单,不就是使用if-else-if或者switch语句么,稍加判断就可以实现各种你想要的运算符号。但是仔细思考一下,如果一个初始程序通过这种方式已经实现“+ - * /”,那当我需要再添加一个根号需要怎么做,有人说很简单,只要多一条分支就可以解决,这又不是难事儿。说的没错,多加一条分支确实不是难事儿,但是你每次修改都需要给你初始程序源码,那当这个初始源码属于机密时,你是否就束手无策了?
所以这个时候往继承这个方向上理解,你就会知道明白奥秘了。
四、实现
首先是定义一个父类,这个父类就是上面我们提到的机密,我们无法接触到的,即只知道这个类内部的构造即可,无法修改它。
package text;
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() {
double result = 0;
return result;
}
}
接下来实现我们需要增加的子类,这个子类就是我们自己随时可以添加的,+ - * / 根号,随时都可以添加。
package text;
public class OperationAdd extends Operation {
@Override
public double GetResult() {
double result = 0;
result = getNumA() + getNumB();
return result;
}
}
仔接下来,为了保证耦合度,就使用工厂类
package text;
public class OperationFactory {
public static Operation createOperation(String operate) {
Operation operation = null;
switch (operate) {
case "+":
operation = new OperationAdd();
break;
}
return operation;
}
}
实现很简单,重在理解。