23種設計模式

2021-09-18 01:28:43 字數 3989 閱讀 6410

**模板設計模式:**也就是抽象類abstract(模板中不能決定的東西定義成抽象方法,讓使用模板(繼承抽象類的類)的類去重寫抽象方法實現需求,這是典型的模板思想)

**裝飾者模式(包裝類):**不用整合,對類進行加強(緩衝輸出流,緩衝輸入流等都是裝飾者模式)

兩個條件:

1.在增強的類中需要獲取被增強的類的引用(可以在構造方法中傳入)

2.增強類和被增強類需要實現相同的介面(需要增強的重寫,不需要增強的呼叫被增強類引用的方法)

//liuplus和liu都實現同乙個介面

public

class

demo

}

****模式:**靜態**跟裝飾者很像(本質都是一樣的),都是對類的增強,動態**可以直接生成乙個**物件。不需要建立**類

靜態方法:

static object newproxyinstance

(classloader loader, class<

?>

inte***ces, invocationhandler h) 動態生成乙個類的**物件

引數1loader: 表示被**類的類載入器 被**類的位元組碼物件.

getclassloader()

引數2inte***ces: 表示被**類實現的所有介面的陣列 被**類的位元組碼物件.

getinte***ces()

以上這2個引數,就是為了動態生成乙個**物件

引數3invocationhandler: 執行處理介面,傳入invocationhandler實現類,用來執行**物件要執行的方法

引數3為了執行**物件呼叫的方法

invocationhandler介面中的方法;

public object invoke

(object proxy, method method, object[

] args)

1. 但凡是**物件呼叫方法就會執行invocationhandler中invoke方法

2. invoke方法中的引數1 proxy: 表示動態生成的**物件,注意,在invoke方法裡面不要使用proxy呼叫方法,否則會棧記憶體溢位錯誤

3. invoke方法中的引數2 method: 表示**物件呼叫的方法

4. invoke方法中的引數3 args: 表示**物件呼叫的方法 傳入的實參

5. invoke方法中的返回值型別: 表示**物件呼叫的方法的 返回值型別

eg:jinlian jinlian =

newjinlian()

;newproxyinstance

(jinlian.

class

.getclassloader()

, jinlian.

class

.getinte***ces()

,new

invocationhandler()

system.out.

println

("王婆以做頭髮的名義把房間開好了...");

method.

invoke

(jinlian)

; system.out.

println()

;return null;}}

);system.out.

println

("呵呵呵");

proxy.()

;system.out.

println

("嘿嘿嘿"

);

單例設計模式:

單例設計模式 --

- 餓漢式:

1.將構造方法私有化,以確保在類的外部不能通過new來建立物件

2.定義乙個本類的成員變數,並建立本類物件,使用private

static

final修飾

3.提供乙個公共靜態方法,供外界獲取本類的唯一物件

public

class

person

// 定義乙個本類的成員變數,並建立本類物件,使用private static final修飾

private

static

final person p =

newperson()

;// 提供乙個公共靜態方法,供外界獲取本類的唯一物件

public

static person getinstance()

}

單例設計模式 --

- 懶漢式:

1.將構造方法私有化,以確保在類的外部不能通過new來建立物件

2.定義乙個本類的成員變數,不需要建立本類物件,使用private

static修飾

3.提供乙個公共靜態方法,供外界獲取本類的唯一物件

3.1 如果本類的成員變數為null,那麼就直接建立本類物件

3.2 如果本類的成員變數不為null,那麼就直接返回該成員變數

餓漢式: 在使用之前就把該類的物件new出來,僅new一次

懶漢式: 在第一次使用的時候把該類的物件new出來,僅new一次,

public

class

person

// 定義乙個本類的成員變數,不需要建立本類物件,使用private static修飾

private

static person p;

// 提供乙個公共靜態方法,供外界獲取本類的唯一物件

public

static

synchronized person getinstance()

return p;

}}

多例設計模式:實際上用列舉代替了

獲取通用物件的多例模式:

1.將構造方法私有化,以確保在類的外部不能通過new來建立物件

2.定義乙個單列集合成員變數,並建立該集合物件,使用private static final

3.定義乙個int型別的成員變數,用來表示該類可以建立多少個物件,使用private static final

4.在靜態**塊中,建立固定個數該類的物件,並新增到集合中

5.提供公共的靜態方法,供外界隨機獲取乙個該類的物件

public

class

***@override

public string tostring()

}

工廠設計模式:

工廠模式的實現: 把建立複雜物件的過程,封裝到乙個工廠類中

1. 編寫乙個car介面, 提供run方法

2. 編寫乙個falali類實現car介面,重寫run方法

3. 編寫乙個benchi類實現car介面

4. 提供乙個ca***ctory(汽車工廠),用於生產汽車物件

5. 定義ca***ctorytest測試汽車工廠

也就是說,當要建立的類可能含有多個引數的時候,為了統一管理這些類,就用了工廠設計模式

public

class

ca***ctory

elseif(

"benchi"

.equalsignorecase

(type)

)// 返回汽車物件

return car;

}}

builder模式

這個builder,其實和模板模式非常的像,但是也有區別,那就是在模板模式中父類對子類中的實現進行操作,在父類之中進行一件事情的處理,但是在builder模式之中,父類和子類都不用關心怎麼處理,而是用另乙個類來完成對這些方法的有機組合,這個類的職責就是『監工』,規定了到底要怎麼樣有機的組合這些方法。在監工類(director)中,將父類組合進去,然後呼叫父類的操作來抽象的實現一件事情,這就是面向介面(抽象)變成的妙處了,當然這個builder可以使介面也可以是抽象類,在這裡我們使用抽象類。

設計模式 23種設計模式

一 軟體設計模式的概念 軟體設計模式 software design pattern 又稱設計模式,是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。它描述了在軟體設計過程中的一些不斷重 生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是前輩們的 設計經驗的總結...

23種設計模式

建立型 1.單件模式 singleton pattern 2.抽象工廠 abstract factory 3.建造者模式 builder 4.工廠方法模式 factory method 5.原型模式 prototype 結構型 6.介面卡模式 adapter pattern 7.橋接模式 bridg...

23種設計模式

設計模式 一書歸納出23種設計模式 1 建立型模式 前面講過,社會化的分工越來越細,自然在軟體設計方面也是如此,因此物件的建立和物件的使用分開也就成為了必然趨勢。因為物件的建立會消耗掉系統的很多資源,所以單獨對物件的建立進行研究,從而能夠高效地建立物件就是建立型模式要 的問題。這裡有6個具體的建立型...