單例模式的使用場景:
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
public
class
forumproxy
implements
forum
public
void
setname(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
public
class
pegadapter
extends
squarepeg
// 打樁-同時打兩個
public
void
insert(string str)
}
加入:需要打樁,但是打什麼型別的樁是動態確定的。
實現方式如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public
class
pegadapter
implements
iroundpeg, isquarepeg
// 構造方法 - squarepeg
public
pegadapter(squarepeg peg)
// 打樁-選擇乙個打樁
public
void
insert(string str)
}
}
strategy(策略模式)
跟adapter模式類似,比adapter模式狹隘。用於動態確定呼叫的物件。
例如:我們要建立乙個演算法解決類,用來提供客戶端可以自由選擇演算法。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public
class
reptemprulesolve
// 切換演算法
public
void
changealgorithm(reptemprule newalgorithm)
public
string 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設計模式
介面卡模式 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本不相容的類可以合作無間。外觀模式 提供了乙個統一的介面,用來訪問子系統中的一群介面。外觀定義了乙個高層介面,讓子系統更容易使用。模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演...