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