1.單例模式
What?
是一種可以讓系統(tǒng)中的同一個對象只有一個存在的模式,每次新建對象都只獲得同一個對象。
Why?
- 一般用來防止常見很耗費內存的對象重復建立,節(jié)省系統(tǒng)開銷。
- 因為只有一份對象,可以用來做計時器之類需要累加的數(shù)據(jù)存放。
- 隱藏對象的詳細信息,更加安全。
How?
將類的構造方法方法定義為私有,再創(chuàng)建出static final前綴的該類對象,加上static 的getSingletong方法返回此對象。如果在多線程中使用需要線程安全的時候可在方法前加synchronize(加鎖)。
調用時直接用getSingletong方法調用。
2.工廠方法模式
What?
是一種可以通過固定方式重復獲得相同對象的方法。
Why?
可封裝對象,隱藏構成方法,減少對象和方法之間的耦合性、
可快速創(chuàng)建出多種不同的類似類。
How?
創(chuàng)建IFactory為工廠類接口,真正的Factory類實現(xiàn)此類,完成其中的構建產品類的方法和產品自身需要的方法。然后產品直接調用該工廠生成產品類,調用工廠中的方法來實現(xiàn)自身的方法。
3、抽象工廠模式
是一種比工廠方法更靈活的模式,與工廠方法不同的是他在接口上進行調用,因此可以實現(xiàn)更多的類型變化。
4、模板模式
講多個類中相同的內容提取到抽象類后,讓這些類來繼承實現(xiàn)該抽象類的一種模式。
簡單說就是把共有的內容向上提取的一種模式。然后繼承后再實現(xiàn)各自自己的特有方法。
5. 建造者模式
是一種模板模式的延伸,比模板模式更復雜的模式,區(qū)別在于抽象出得接口可以供一個統(tǒng)一的操作類來操作的模式。
6.代理模式
用一個實現(xiàn)相同接口的類來代替自己處理事情的模式。代理類通過調用被代理類的方法來完成被代理類需要的操作。
7.原型模式
一種使用clone方法直接復制內存中的類的方法,可以繞開類的構造方法。
PS:注意淺拷貝和深拷貝的區(qū)別,淺拷貝不會拷貝非基本類型,而是直接指向該類(String可看成基本類型)
8、中介者模式
一般用于多個類間關系復雜的數(shù)據(jù)模型,特別是每個類兩兩之間都有關聯(lián),就可以新建一個中介者類來讓各個類只和這個中介者類打交道。可減少不同類之間的耦合。
是一種現(xiàn)實中也用的很多的模式,比如房屋中介、
9、責任鏈模式
如果一個業(yè)務需要按不同條件時有不同執(zhí)行人或方法時,且有執(zhí)行優(yōu)先級時,可以使用這種模式。
抽象出一個業(yè)務類,不同的執(zhí)行人來繼承實現(xiàn)這個業(yè)務類,然后調用時,直接調用抽象類,實行遞歸來執(zhí)行業(yè)務。
優(yōu)點:可以解除類之間的耦合,方便擴展。
10.裝飾模式
是一種將多種對類修飾的方法分離出來得模式。被修飾類和修飾類接口共同實現(xiàn)一個抽象出來得接口。然后修飾類接口封裝一個被修飾類,不同的修飾類繼承實現(xiàn)此修飾類接口,就可以實現(xiàn)對唄修飾類的不同修飾。
優(yōu)點:靈活多變,解耦,方便擴展。
11.策略模式
實現(xiàn)多種類似操作時,將相同的內容抽象成接口然后通過接口來統(tǒng)一操作的一種模式。調用者直接使用對接口封裝好操作類來實現(xiàn)調用。
比如:計算器
12.迭代器模式
現(xiàn)在很少會實際去寫的模式,就是為抽象容器完成寫一個方便遍歷的類。java中的容器基本都實現(xiàn)了這個迭代器類Iterator。
13.組合模式
通常用來建立樹狀模型,可按順序記錄數(shù)據(jù)庫數(shù)據(jù)實現(xiàn)數(shù)據(jù)調用。
14.觀察者模式
一種一對多依賴關系模式,被觀察者可調用多個觀察者,然后通知他們對一個觸發(fā)執(zhí)行不同的方法。
15.命令模式
通過一個統(tǒng)一的命令接受者封裝命令接口來實現(xiàn)不同命令的模式。具體的命令類實現(xiàn)命令接口且調用不同的命令接受者。命令發(fā)出者只用調用命令接受者,不用管下面的命令具體接受人是誰。