Java思想1——簡單工廠模式

本文內容基於《大話設計模式》——程傑,建議大家讀讀原著
1 我們要考慮什麼?
1)爲了提高程序的可維護性,需要對各個模塊之間進行解耦,要讓它們之間的關聯儘可能地小。避免修改其中一個模塊的時候,需要對另一個模塊大動干戈。
2)前端與後端要儘可能地分離解耦,原因還是與1)相同,提高程序的可維護性。前端是程序展示在用戶面前的界面,而後端是每一個按鈕或者是效果的具體實現。
3)對於前端的校驗。這一塊是基於程序安全性的考慮。不要忽視這一點。這不光包括用戶輸入的內容,還包括用戶可能僞裝成瀏覽器發送的給服務端的內容

2 關於前端的校驗
對於第三條舉兩個的例子
1)把 0 最爲除數。但這個很容易用try{}catch{}接住解決問題
2)sql 注入攻擊,這是一個十分重要的例子。在java連接數據庫時,由於使用了sql語法的字符串向數據庫發送命令,如果不檢驗用戶填寫的數據就會引發危險。
比如

select * from 數據庫名 where username='用戶名' && password='密碼'

該語句用於數據庫中查詢一條記錄,而其中的用戶名和密碼可能是從前端通過GET或者POST方法得到的。
那麼如果有別有用心的人,模擬瀏覽器使用GET和POST方法向服務器發送用戶名和密碼爲:a’ or ‘a’='a
那麼發送的sql語句就變成了

select * from 數據庫名 where username='a' or 'a'='a' && password='a' or 'a'='a'

這條語句將查詢數據庫的所有記錄,所以記錄一定存在。此時,即便用戶名和密碼錯誤,用戶仍舊可以登錄進網站。

3 簡單工廠
將界面的展示和功能的實現彼此分離開。並且將每一個功能包裝成一個類。這樣還不夠,爲了方便前端使用,我們還要把所有功能彙總成一個工廠,前端只能通過這個工程創建實例,在創建實例的時候全自動實現對應的功能。這樣就實現了前後端的解耦。

比如我想設計一個計算器,計算器中有 123456789±*/ 這些按鈕。這些按鈕的界面由前端設計好,後端只負責用戶點擊某一個按鈕時實現的功能。
比如點擊了 + 和 - 這個按鈕

public class add{
 public add(){
  在屏幕上顯示加號;
 }
}

public class minus{
 public minus(){
  在屏幕上顯示減號
 }
}

考慮到方便讓前端調用,所以建立了簡單工廠,即讓前端通過一條命令就可以實現一個功能的操作
比如要求 Operation.createOperation("+") 這句話實現加操作,
Operation.createOperation("-") 這句話實現減操作。

public class Operation{
 public static void createOperation(String operation){
  switch(operation){
	 case "+":
	 	new add();
	 case "-":
	 	new minus();
	}
 }
}

這麼做,那前端的負擔就減小了,只要在 + 按鈕的監聽器內部寫入這句話就行了。當這個 + 號功能出現了問題,前端不需要修改 + 按鈕監聽器的內容,只需要後端工程師檢查 add 類有沒有問題就好了。

但是需要注意,如果 add 類和 minus 類都有返回參數的話需要使得 add 和 minus 類繼承同一個類或者實現同一個接口,比如 A ,然後在簡單工廠內,返回 A 類或接口即可,此時前端接收需要強轉。

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