Java中有哪幾種常見的設計模式

Java中一般認爲有23種設計模式,分別是:

1.創建型模式,五種:工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式;

2.結構型模式,七種:適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。

3.行爲型模式,十一種:策略模式,模板方法模式,觀察者模式,迭代子模式,責任鏈模式,命令模式,備忘錄模式,狀態模式,訪問者模式,中介者模式,解釋器模式。

常見的有:單例模式,工廠方法模式,抽象工廠模式,建造者模式,適配器模式,裝飾模式,策略模式,代理模式。

1.通過靜態內部類來實現單例模式有什麼好處?

1.避免線程排隊,阻塞,節約時間。

2.調用getInstance()的時候,纔會將符號引用變成直接引用,也就是初始化,類似懶加載,節約空間。

2.靜態代理和動態代理有什麼區別,在安卓中的使用場景是?

1.代理模式:分爲靜態代理和動態代理。例如:明星和經紀人就是一對被代理人和代理人。要明星表演就要通過經紀人來傳達。我們把通過代理對象來間接操作目標對象的方式,稱之爲“代理模式”。

好處:在實現目標對象的功能的基礎上,可以擴展額外功能,而不用改動目標對象。

靜態代理:代理對象和目標對象要一起實現相同的接口,或者繼承同一個父類。

動態代理:在程序運行時生成代理對象。

區別:

在給多個方法相同的類進行代理的時候,靜態代理需要實現多個接口,太過麻煩。這個時候使用動態代理比較好。動態代理不需要去實現接口。

靜態代理:代理對象在程序運行前就存在,要實現接口。

動態代理:代理對象在程序運行中生成,不需要實現接口。

場景:

靜態:四大組件跟AIDL和AMS進行跨進程通信。

動態:Retrofit(基於OKHttp封裝的網絡請求框架)使用了動態代理,極大的提升了框架的擴展性和可維護性。

具體:https://www.cnblogs.com/jie-y/p/10732347.html

3.簡單工廠、工廠方法、抽象工廠的區別?

簡單工廠:一個工廠方法可以創建不同類型的對象;

工廠方法:一個具體工廠類只創建一個具體對象;

抽象工廠:一個具體工廠類只創建一系列相關的對象。

具體:https://www.cnblogs.com/heliusKing/p/11577837.html

4.建造者模式

將複雜對象創建的過程抽象出來,根據具體實現抽象的不同,生成的對象也不同。

具體:https://www.jianshu.com/p/afe090b2e19c

5.代理模式和裝飾器模式的區別?

1.定義:

裝飾器模式:給一個對象動態的添加一些額外功能,就增加功能來說,裝飾器模式比生成子類更加靈活。

2.區別:

裝飾器模式更加強調給一個對象添加功能,而代理模式更加強調對被代理對象的方法調用。裝飾器模式是以客戶端透明的方式爲對象擴展功能的,而代理模式往往會隱藏被代理對象,在內部不想暴露出來。

參考文章:https://www.cnblogs.com/adamjwh/p/9036358.html

6.什麼是橋接模式?

橋接模式:主要爲了應對某個類族有多個變化維度,導致子類類型急劇增加的場景。通過橋接模式把多個變化維度分隔開,使它們可以獨立的變化,最後通過組合以應對多維變化,減少子類類型的數量和複雜度。

具體:https://www.cnblogs.com/WindSun/p/10260547.html

7.外觀模式和中介模式的區別?

外觀模式:爲子系統一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使子系統更加容易使用。

具體:https://www.cnblogs.com/adamjwh/p/9048594.html

中介模式:用來解決多個對象顯式相互調用造成的耦合,使用一箇中介來使耦合鬆散,使類之間減少依賴。

具體:https://www.jianshu.com/p/298ef103b484

區別:

外觀模式重點是對外封裝統一的高層接口,便於用戶使用;而中介模式是爲了避免多個相互協作的對象直接引用,通過一箇中介對象進行交互,使耦合鬆散,能夠易於應對變化。

8.策略模式和狀態模式的區別?

策略模式:定義了一組算法,把每個算法都封裝起來,並且使他們可以互相切換。

具體:https://www.cnblogs.com/adamjwh/p/11011095.html

狀態模式:當一個對象內部狀態改變時,允許改變其行爲,這個對象看起來好像改變了其類。

具體:https://www.jianshu.com/p/5bf844141687

區別:

雖然他們類型結構一致,但是本質是不一樣的。策略模式重點是切換整個算法,而狀態模式是改變狀態,改變其行爲。

9.適配器模式,代理模式,裝飾器模式,外觀模式的異同?

適配器模式:將一個已經存在的接口轉換成客戶希望的另一個接口,使接口不兼容的類可以協同工作。

具體:https://blog.csdn.net/wwwdc1012/article/details/82780560

同:

它們都是作爲中間層,起到用戶間接調用真實類方法的作用。

異:

1.使用場景和思想不一樣;

2.代理模式,代理目標對象,控制對該對象的訪問;

外觀模式,外觀對象提供子系統各元件功能簡化爲共同層次的調用接口,它主要起“簡化作用”;

適配器模式,是對其他對象接口的一種轉換行爲,將原接口轉換爲目標接口,達到適配的效果;

裝飾器模式,給對象動態增加功能。

代理是“控制訪問行爲”,外觀是“簡化行爲”,適配器是“轉換行爲”,裝飾器是“新增行爲”。

 

 

參考文章:https://juejin.im/post/5e5c5c52f265da575f4e7558

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章