深入理解抽象工廠模式 狀態模式

2021-09-25 15:46:14 字數 1618 閱讀 6919

提供給客戶端一系列與需求相關的,相互依賴的介面,通過介面的呼叫的可變性來提高**的適用性。舉個例子,在開發中,我們使用不同的資料庫的語法不一樣,oracle與mysql例如分頁上語法不一,mongodb操作為指令性操作,後台通過getcommand()方法來操作mongodb,因為需求的對資料庫型別的改變就需要修改很多**,通過抽象工廠模式可以起到靈活轉換,**使用性提高的作用。下面的**省略了mongodb實現user介面與建立mongodb工廠的類。

public inte***ce user 

public class sqlserveruse implements user

@override

public void setuser()

}public inte***ce ifctory

public class sqlserve***ctory implements ifctory

}

看一下抽象工廠模式的架構圖,雖然做到了設計模式中單一職責原則,對每個的類的修改變少了,但是抽象工廠模式只對既定的轉換情況表現靈活性,對於需求轉換的大更改,就會要求增加很多的類,使用起來並不方便。

去掉抽象工廠模式中的ifactory與每個資料庫具體實現返回例項的factory類。用反射來例項化物件。這樣對於需求的更改,只需要增加對實體類需要的資料庫操作類就可以了,即上面的實現user的類。在設計中應該更多的減少原有**上的更改,這裡的**可以通過spring框架依賴注入的原理,在xml檔案中配置databasename,然後讓reflectfactoryuse去解析xml拿到databasename。

public class reflectfactoryuse  catch (classnotfoundexception e) 

return (user)clazz.newinstance();

}}

當乙個物件內部的狀態發生了改變,同時行為也跟著發生改變。常規的操作會通過if...else if......else if...../switch ... case x:.....來對狀態發的改變判斷然後做出行為改變。狀態模式,用於簡化語句判斷的冗長,讓物件中狀態發生改變時,行為改變就像改變了這個類。在具體的物件中,構造初始化最早發生的狀態,然後通過對每個狀態的封裝來解決冗長問題,也方便日後需求修改,對於狀態新增或者修改的需求。

設計模式之深入理解工廠方法模式

對於工廠模式大家都是耳熟能詳的,但是發現大家對工廠模式的叫法比較混亂,我先明確一下概念。工廠模式分為 工廠方法模式 和 抽象工廠模式 此兩種模式是屬於gof23種經典設計模式的。平時大家所說的 工廠模式 其實就是指 工廠方法模式 工廠方法模式還可以退化為 簡單工廠模式 簡單工廠模式 並不屬於gof2...

深入理解23種設計模式 21 狀態模式

狀態模式 state pattern 它主要是用來解決物件在多種狀態之間的轉換,需要對外輸出不同的行為的問題,狀態和行為是一一對應的,狀態之間可以互相轉換。當乙個物件的內在狀態改變時,允許改變其行為,這個物件看起來是改變了其他類。活動 假如每參加一次這個活動要扣除50積分,中獎概率是10 獎品數量固...

理解設計模式 抽象工廠模式

一 簡單工廠模式 定義 專門定義乙個類用來負責建立其他類的例項,被建立的類通常具有共同的父類 沒有也行 產品類 public inte ce product 繼承產品的子類a產品 public class producta implements product 繼承產品的子類b產品 public c...