原本自己開發了各種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;
}
}
實現很簡單,重在理解。