設計模式:簡單工廠模式

原本自己開發了各種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;
	}
}

實現很簡單,重在理解。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章