Java設計模式

2021-07-25 17:33:49 字數 3830 閱讀 4691

單例模式的使用場景:

1、快取資源,控制資源的併發讀、寫。(資源即類的屬性)

例如:有一把鎖,需要兩把鑰匙才能開啟。在更換鑰匙期間,是不允許開鎖的。

而且,兩把鑰匙必須更換完才允許開鎖,即,只更換完一把時,是不允許開鎖的。

假設乙個執行緒修改完了一把鑰匙,正準備修改第二把鑰匙,而此時另外乙個執行緒又試圖開鎖。

有兩種做法:

1)此時不允許開鎖,必須等第二把鑰匙更改完成後才允許。

2)允許開鎖,仍然用未更改的舊鑰匙。

讀的時候,為提高效率,最好能避免使用synchronized同步。

設計模式:

proxy

adapter

decorator

delegate

區別:proxy:某個客戶端不能直接操作到某個物件,但又必須和那個物件有所互動。

proxy就象一道牆,其他程式只能和proxy互動操作。

用法1: 授權、檢查機制。

比如,通過forumproxy**,控制使用者對論壇的訪問許可權。**如下: 1

2

3

4

5

6

7

8

9

10

11

12

13

14

publicclassforumproxyimplementsforum

publicvoidsetname(string name)

}

}

只能通過forumproxy來建立forum,並且要求傳入forumpermissions。在setname的時候,會首先檢查許可權。

動態**就是這個系列的一種高階實現方式。

用法2:延遲初始化。先要獲得某種資源,但是不急著去使用它。

例如,如果直接用

abc obj= new abc(); // 或者 abc obj = getabc();

obj.do***();

假設獲得obj的過程很漫長,而且不會立即用到,那麼就建立乙個abcproxy物件,然後再呼叫**物件的do***()方法:

void do***()

decorator模式:

不改變原來定義的類,但是又想給他增加功能。而且又不想繼承它。

那就用decorator模式,例如bufferedreader:

filereader fr = new filereader(filename);

bufferedreader br = new bufferedreader(fr);

將原來的物件作為引數傳到decorator中,注意

decorator和原來的物件,都implements了同乙個介面,比如reader。

呼叫decorator時,可以在原物件的方法前後,加上decorator自定義的方法。

decorator模式和proxy模式的區別在於,decorator著重於「增加功能」,而proxy著重於「改造」。

通常來說,proxy的使用頻率比decorator要高。

adapter模式:將兩個類組合在一起使用,建立一種統一的使用方法。

例如,假設我們有兩種打樁方式:方形樁、圓形樁。現在有乙個應用,需要既打方形樁,又打圓形樁。

實現方式如下: 1

2

3

4

5

6

7

8

9

10

11

publicclasspegadapterextendssquarepeg

// 打樁-同時打兩個

publicvoidinsert(string str)

}

加入:需要打樁,但是打什麼型別的樁是動態確定的。

實現方式如下: 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

publicclasspegadapterimplementsiroundpeg, isquarepeg

// 構造方法 - squarepeg

publicpegadapter(squarepeg peg)

// 打樁-選擇乙個打樁

publicvoidinsert(string str)

}

}

strategy(策略模式)

跟adapter模式類似,比adapter模式狹隘。用於動態確定呼叫的物件。

例如:我們要建立乙個演算法解決類,用來提供客戶端可以自由選擇演算法。 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

publicclassreptemprulesolve

// 切換演算法

publicvoidchangealgorithm(reptemprule newalgorithm)

publicstring doservice(site site,string oldstring)

}

java設計模式

a categorization of patterns by intent intent patterns inte ces adapter,facade,composite,bridge responsibility singleton,observer,mediator,proxy,chain...

JAVA設計模式

設計模式 設計模式分類 設計模式分為三類,建立型模式,結構型模式,行為型模式 建立型模式 1 工廠方法模式 2 抽象工廠模式 3 單例模式 4 建造者模式 5 原型模式 結構型模式 1 介面卡模式 2 裝飾器模式 3 模式 4 外觀模式 5 橋接模式 6 組合模式 7 享元模式 行為型模式 1 策略...

JAVA設計模式

介面卡模式 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本不相容的類可以合作無間。外觀模式 提供了乙個統一的介面,用來訪問子系統中的一群介面。外觀定義了乙個高層介面,讓子系統更容易使用。模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演...