
設計模式
設計模式(Design Patterns)代表了最佳的實踐,通常被有經驗的面向對象的軟件開發人員所采用。設計模式是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發人員經過相當長的一段時間的試驗和錯誤總結出來的。
設計模式是一套被反復使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式于己于他人于系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項目中合理地運用設計模式可以完美地解決很多問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了一個在我們周圍不斷重復發生的問題,以及該問題的核心解決方案,這也是設計模式能被廣泛應用的原因。
ThinkWon
敏于觀察,勤于思考,善于綜合,勇于創新。
-
轉載 業務復雜=if else?剛來的大神竟然用策略+工廠徹底干掉了他們!
文章目錄太多if-else影響可讀性和可維護性舉例外賣平臺需求引入策略模式借助Spring和工廠模式解決策略模式存在的問題Spring Bean的注冊總結太多if-else影響可讀性和可維護性對于業務開發來說,業務邏輯的復雜是必然的,隨著業務發展,需求只會越來越復雜,為了考慮到各種各樣的情況,代碼中不可避免的會出現很多if-else。一旦代碼中if-else過多,就會大大的影響其可讀性和可...2019-11-05 21:26:075708
7
-
原創 空對象模式
介紹在空對象模式(Null Object Pattern)中,一個空對象取代 NULL 對象實例的檢查。Null 對象不是檢查空值,而是反應一個不做任何動作的關系。這樣的 Null 對象也可以在數據不可用的時候提供默認的行為。在空對象模式中,我們創建一個指定各種要執行的操作的抽象類和擴展該類的實體類,還創建一個未對該類做任何實現的空對象類,該空對象類將無縫地使用在需要檢查空值的地方。實現我...2019-09-25 20:29:483340
2
-
原創 命令模式
命令模式(Command Pattern)是一種數據驅動的設計模式,它屬于行為型模式。請求以命令的形式包裹在對象中,并傳給調用對象。調用對象尋找可以處理該命令的合適的對象,并把該命令傳給相應的對象,該對象執行命令。介紹意圖:將一個請求封裝成一個對象,從而使您可以用不同的請求對客戶進行參數化。主要解決:在軟件系統中,行為請求者與行為實現者通常是一種緊耦合的關系,但某些場合,比如需要對行為進行記...2019-09-25 20:30:523343
2
-
原創 模板模式
在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式。介紹意圖:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。主要解決:一些方法通用,卻在每一個子類都重新寫了這一方法。何...2019-09-25 20:31:553395
2
-
原創 責任鏈模式
顧名思義,責任鏈模式(Chain of Responsibility Pattern)為請求創建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。介紹意圖:避免請求發送者與接收者耦合在一起,讓多個對象...2019-09-25 20:32:523392
2
-
原創 中介者模式
中介者模式(Mediator Pattern)是用來降低多個對象和類之間的通信復雜性。這種模式提供了一個中介類,該類通常處理不同類之間的通信,并支持松耦合,使代碼易于維護。中介者模式屬于行為型模式。介紹意圖:用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。主要解決:對象與對象之間存在大量的關聯關系,這樣勢必會導致系...2019-09-25 20:33:513225
2
-
原創 狀態模式
在狀態模式(State Pattern)中,類的行為是基于它的狀態改變的。這種類型的設計模式屬于行為型模式。在狀態模式中,我們創建表示各種狀態的對象和一個行為隨著狀態對象改變而改變的 context 對象。介紹意圖:允許對象在內部狀態發生改變時改變它的行為,對象看起來好像修改了它的類。主要解決:對象的行為依賴于它的狀態(屬性),并且可以根據它的狀態改變而改變它的相關行為。何時使用:代碼中...2019-09-25 20:34:543307
2
-
原創 代理模式
在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式。在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。介紹意圖:為其他對象提供一種代理以控制對這個對象的訪問。主要解決:在直接訪問對象時帶來的問題,比如說:要訪問的對象在遠程的機器上。在面向對象系統中,有些對象由于某些原因(比如對象創建開銷很大,或者某些操作需要安全控制,或者...2019-09-25 20:36:574380
3
-
原創 過濾器模式
介紹過濾器模式(Filter Pattern)或標準模式(Criteria Pattern)是一種設計模式,這種模式允許開發人員使用不同的標準來過濾一組對象,通過邏輯運算以解耦的方式把它們連接起來。這種類型的設計模式屬于結構型模式,它結合多個標準來獲得單一標準。實現我們將創建一個 Person 對象、Criteria 接口和實現了該接口的實體類,來過濾 Person 對象的列表。Crite...2019-09-25 20:37:583690
3
-
原創 橋接模式
橋接(Bridge)是用于把抽象化與實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬于結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。這種模式涉及到一個作為橋接的接口,使得實體類的功能獨立于接口實現類。這兩種類型的類可被結構化改變而互不影響。我們通過下面的實例來演示橋接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象類方法但是不同的橋接實現類,來...2019-09-25 20:38:473732
3
-
原創 適配器模式
適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬于結構型模式,它結合了兩個獨立接口的功能。這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。舉個真實的例子,讀卡器是作為內存卡和筆記本之間的適配器。您將內存卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取內存卡。我們通過下面的實例來演示適配器模式的使用。其中,音頻播放...2019-09-25 20:39:463633
2
-
原創 外觀模式
外觀模式(Facade Pattern)隱藏系統的復雜性,并向客戶端提供了一個客戶端可以訪問系統的接口。這種類型的設計模式屬于結構型模式,它向現有的系統添加一個接口,來隱藏系統的復雜性。這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系統類方法的委托調用。介紹意圖:為子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。主要...2019-09-25 20:40:403361
2
-
原創 享元模式
享元模式(Flyweight Pattern)主要用于減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬于結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的方式。享元模式嘗試重用現有的同類對象,如果未找到匹配的對象,則創建新對象。我們將通過創建 5 個對象來畫出 20 個分布于不同位置的圓來演示這種模式。由于只有 5 種可用的顏色,所以 color 屬性被用來檢查現有的...2019-09-25 20:41:323333
3
-
原創 裝飾器模式
裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。我們通過下面的實例來演示裝飾器模式的用法。其中,我們將把一個形狀裝飾上不同的顏色,同時又不改變形狀類。介紹意圖:動態地給一個對象添加...2019-09-25 20:42:283647
5
-
原創 組合模式
組合模式(Composite Pattern),又叫部分整體模式,是用于把一組相似的對象當作一個單一的對象。組合模式依據樹形結構來組合對象,用來表示部分以及整體層次。這種類型的設計模式屬于結構型模式,它創建了對象組的樹形結構。這種模式創建了一個包含自己對象組的類。該類提供了修改相同對象組的方式。我們通過下面的實例來演示組合模式的用法。實例演示了一個組織中員工的層次結構。介紹意圖:將對象組合...2019-09-25 20:43:233343
3
-
轉載 設計模式
設計模式簡介設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向對象的軟件開發人員所采用。設計模式是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發人員經過相當長的一段時間的試驗和錯誤總結出來的。設計模式是一套被反復使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性...2019-07-22 09:33:227518
2
-
原創 解釋器模式
解釋器模式(Interpreter Pattern)提供了評估語言的語法或表達式的方式,它屬于行為型模式。這種模式實現了一個表達式接口,該接口解釋一個特定的上下文。這種模式被用在 SQL 解析、符號處理引擎等。介紹意圖:給定一個語言,定義它的文法表示,并定義一個解釋器,這個解釋器使用該標識來解釋語言中的句子。主要解決:對于一些固定文法構建一個解釋句子的解釋器。何時使用:如果一種特定類型的問...2019-09-25 20:28:503198
3
-
原創 觀察者模式
當對象間存在一對多關系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬于行為型模式。介紹意圖:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。主要解決:一個對象狀態改變給其他對象通知的問題,而且要考慮到易用和低耦合,保證高度的協作。何時使用:一個對象(目標對象)...2019-09-25 20:27:413650
2
-
原創 訪問者模式
在訪問者模式(Visitor Pattern)中,我們使用了一個訪問者類,它改變了元素類的執行算法。通過這種方式,元素的執行算法可以隨著訪問者改變而改變。這種類型的設計模式屬于行為型模式。根據模式,元素對象已接受訪問者對象,這樣訪問者對象就可以處理元素對象上的操作。介紹意圖:主要將數據結構與數據操作分離。主要解決:穩定的數據結構和易變的操作耦合問題。何時使用:需要對一個對象結構中的對象進...2019-09-25 20:26:303203
2
-
原創 傳輸對象模式
介紹傳輸對象模式(Transfer Object Pattern)用于從客戶端向服務器一次性傳遞帶有多個屬性的數據。傳輸對象也被稱為數值對象。傳輸對象是一個具有 getter/setter 方法的簡單的 POJO 類,它是可序列化的,所以它可以通過網絡傳輸。它沒有任何的行為。服務器端的業務類通常從數據庫讀取數據,然后填充 POJO,并把它發送到客戶端或按值傳遞它。對于客戶端,傳輸對象是只讀...2019-09-25 19:59:193565
2
-
原創 攔截過濾器模式
介紹攔截過濾器模式(Intercepting Filter Pattern)用于對應用程序的請求或響應做一些預處理/后處理。定義過濾器,并在把請求傳給實際目標應用程序之前應用在請求上。過濾器可以做認證/授權/記錄日志,或者跟蹤請求,然后把請求傳給相應的處理程序。以下是這種設計模式的實體。過濾器(Filter) - 過濾器在請求處理程序執行請求之前或之后,執行某些任務。過濾器鏈(Filte...2019-09-25 20:01:383642
2
-
原創 前端控制器模式
介紹前端控制器模式(Front Controller Pattern)是用來提供一個集中的請求處理機制,所有的請求都將由一個單一的處理程序處理。該處理程序可以做認證/授權/記錄日志,或者跟蹤請求,然后把請求傳給相應的處理程序。以下是這種設計模式的實體。前端控制器(Front Controller) - 處理應用程序所有類型請求的單個處理程序,應用程序可以是基于 web 的應用程序,也可以是基...2019-09-25 20:02:373627
2
-
原創 數據訪問對象模式
介紹數據訪問對象模式(Data Access Object Pattern)或 DAO 模式用于把低級的數據訪問 API 或操作從高級的業務服務中分離出來。以下是數據訪問對象模式的參與者。數據訪問對象接口(Data Access Object Interface) - 該接口定義了在一個模型對象上要執行的標準操作。數據訪問對象實體類(Data Access Object concrete ...2019-09-25 20:03:363429
3
-
原創 業務代表模式
介紹業務代表模式(Business Delegate Pattern)用于對表示層和業務層解耦。它基本上是用來減少通信或對表示層代碼中的業務層代碼的遠程查詢功能。在業務層中我們有以下實體??蛻舳耍–lient) - 表示層代碼可以是 JSP、servlet 或 UI java 代碼。業務代表(Business Delegate) - 一個為客戶端實體提供的入口類,它提供了對業務服務方法的訪...2019-09-25 20:04:353254
2
-
原創 組合實體模式
介紹組合實體模式(Composite Entity Pattern)用在 EJB 持久化機制中。一個組合實體是一個 EJB 實體 bean,代表了對象的圖解。當更新一個組合實體時,內部依賴對象 beans 會自動更新,因為它們是由 EJB 實體 bean 管理的。以下是組合實體 bean 的參與者。組合實體(Composite Entity) - 它是主要的實體 bean。它可以是粗粒的...2019-09-25 20:05:383268
2
-
原創 抽象工廠模式
抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。在抽象工廠模式中,接口是負責創建一個相關對象的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供對象。介紹意圖:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。主要...2019-09-25 20:08:166183
5
-
原創 單例模式
單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。注意:1、單例類只能有一個實例。2、單例類必須自己創建自己的唯一實例。3、單例類...2019-09-25 20:11:565154
7
-
原創 工廠模式
工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,并且是通過使用一個共同的接口來指向新創建的對象。介紹意圖:定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行。主要解決:主要解決接口選擇的問題。...2019-09-25 20:18:414503
5
-
原創 建造者模式
建造者模式(Builder Pattern)使用多個簡單的對象一步一步構建成一個復雜的對象。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。一個 Builder 類會一步一步構造最終的對象。該 Builder 類是獨立于其他對象的。介紹意圖:將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。主要解決:主要解決在軟件系統中,有時候面臨著"一個復雜對象"的...2019-09-25 20:20:193809
3
-
原創 原型模式
原型模式(Prototype Pattern)是用于創建重復的對象,同時又能保證性能。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。這種模式是實現了一個原型接口,該接口用于創建當前對象的克隆。當直接創建對象的代價比較大時,則采用這種模式。例如,一個對象需要在一個高代價的數據庫操作之后被創建。我們可以緩存該對象,在下一個請求時返回它的克隆,在需要的時候更新數據庫,以此來減少數據...2019-09-25 20:21:303751
3
-
原創 備忘錄模式
備忘錄模式(Memento Pattern)保存一個對象的某個狀態,以便在適當的時候恢復對象。備忘錄模式屬于行為型模式。介紹意圖:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。主要解決:所謂備忘錄模式就是在不破壞封裝的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,這樣可以在以后將對象恢復到原先保存的狀態。何時使用:很多時候我們總是需要記錄一個對象...2019-09-25 20:22:543553
3
-
原創 策略模式
在策略模式(Strategy Pattern)中,一個類的行為或其算法可以在運行時更改。這種類型的設計模式屬于行為型模式。在策略模式中,我們創建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執行算法。介紹意圖:定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換。主要解決:在有多種算法相似的情況下,使用 if…el...2019-09-25 20:23:533672
3
-
原創 迭代器模式
迭代器模式(Iterator Pattern)是 Java 和 .Net 編程環境中非常常用的設計模式。這種模式用于順序訪問集合對象的元素,不需要知道集合對象的底層表示。迭代器模式屬于行為型模式。介紹意圖:提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內部表示。主要解決:不同的方式來遍歷整個整合對象。何時使用:遍歷一個聚合對象。如何解決:把在元素之間游走的責任交給迭...2019-09-25 20:25:153540
3
-
原創 MVC模式
介紹MVC 模式代表 Model-View-Controller(模型-視圖-控制器) 模式。這種模式用于應用程序的分層開發。Model(模型) - 模型代表一個存取數據的對象或 JAVA POJO。它也可以帶有邏輯,在數據變化時更新控制器。View(視圖) - 視圖代表模型包含的數據的可視化。Controller(控制器) - 控制器作用于模型和視圖上。它控制數據流向模型對象,并在數據...2019-09-25 19:49:294650
3