23種設(shè)計(jì)模式

概述

為什么學(xué)習(xí)設(shè)計(jì)模式:為了代碼優(yōu)雅,復(fù)用,拓展性,易讀性等等。
什么是設(shè)計(jì)模式:前輩們總結(jié)的,特定問(wèn)題的代碼設(shè)計(jì)方案,是一種優(yōu)秀東西的傳承。
原則:

  • 單一職責(zé)原則
  • 開(kāi)放封閉原則(最好方式是提供一個(gè)固有的接口,然后讓所有可能發(fā)生變化的類實(shí)現(xiàn)該接口,讓固定的接口與相關(guān)對(duì)象進(jìn)行交互)
  • 里氏代替原則(子類必須替換掉它們的父類型)
  • 依賴倒置原則(細(xì)節(jié)/實(shí)現(xiàn)應(yīng)該依賴于抽象,而抽象不應(yīng)該依賴于細(xì)節(jié)/實(shí)現(xiàn))
  • 接口隔離原則(使用多個(gè)專門功能的接口,而不是使用單一的總接口)
  • 合成復(fù)用原則(新對(duì)象通過(guò)向這些對(duì)象的委派達(dá)到復(fù)用已用功能的目的。簡(jiǎn)單地說(shuō),就是要盡量使用合成/聚合,盡量不要使用繼承)
  • 最少知識(shí)原則(迪米特法則)(一個(gè)模塊或?qū)ο髴?yīng)盡量少的與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對(duì)獨(dú)立,這樣當(dāng)一個(gè)模塊修改時(shí),影響的模塊就會(huì)越少,擴(kuò)展起來(lái)更加容易)
    分類:


    image.png

大話PHP設(shè)計(jì)模式(視頻3.5h)

1(創(chuàng)建型)單例模式 *****

https://blog.csdn.net/qq_25827845/article/details/51150165

image.png

餓漢式

//空間換時(shí)間方案
class Single{
   private Single(){}
   private static final Single single = new Single();
   public static Single getInstance()  
    {  
        return s;  
    }  
}

懶漢式(實(shí)例延遲加載)

//考慮線程安全,使用內(nèi)部類實(shí)現(xiàn)
class Single{          
    private Single(){}    
    private static class Inner{  
        final static Single s = new Single();  
    }  
    public static  Single getInstance(){  
        return Inner.s;  
    }    
}  

2(創(chuàng)建型)工廠方法模式 *****

https://blog.csdn.net/qq_25827845/article/details/52503884

image.png

3(創(chuàng)建型)抽象工廠模式 *****

https://blog.csdn.net/qq_25827845/article/details/52503884

image.png

4(創(chuàng)建型)建造者模式

https://blog.csdn.net/qq_25827845/article/details/52932495

5.(創(chuàng)建型)原型模式

https://blog.csdn.net/qq_25827845/article/details/52422098

6(結(jié)構(gòu)型)適配器 *****

https://blog.csdn.net/lmb55/article/details/51008762
https://www.imooc.com/learn/146
https://blog.csdn.net/qq_25827845/article/details/51966534

image.png

7(結(jié)構(gòu)型)橋梁模式

https://blog.csdn.net/qq_25827845/article/details/52490611

8(結(jié)構(gòu)型)裝飾器模式 *****

逐漸被代理模式替代
https://blog.csdn.net/wwh578867817/article/details/51480441
https://blog.csdn.net/qq_25827845/article/details/51570272

image.png

9(結(jié)構(gòu)型)門面模式

https://blog.csdn.net/qq_25827845/article/details/52032536

10(結(jié)構(gòu)型)合成模式

https://blog.csdn.net/qq_25827845/article/details/52496522

11(結(jié)構(gòu)型)享元模式

https://blog.csdn.net/qq_25827845/article/details/52496622

12(結(jié)構(gòu)型)代理模式 *****

https://www.cnblogs.com/cenyu/p/6289209.html推薦
https://www.imooc.com/learn/214
https://blog.csdn.net/qq_25827845/article/details/52452953

13(行為型)模板方法模式

https://blog.csdn.net/qq_25827845/article/details/51868973

模板方法模式

image.png

Abstract Class叫做抽象模板,它的方法分為兩類:模板方法和基本方法。
基本方法:基本方法也叫做基本操作,是由子類實(shí)現(xiàn)的方法,并且在模板方法中被調(diào)用。
模板方法:可以有一個(gè)或者幾個(gè),一般是具體的方法,實(shí)現(xiàn)對(duì)基本方法的調(diào)度,完成固定的邏輯。為了防止惡意的操作,一般模板方法前面會(huì)加上final關(guān)鍵字,不允許被覆寫。

具體模板:ConcreteClass1和ConcreteClass2屬于具體模板,實(shí)現(xiàn)父類所定義的一個(gè)或多個(gè)抽象方法,也就是父類定義的基本方法在子類中得以實(shí)現(xiàn)。

//抽象模板類
public abstract class AbstractClass {  
     //基本方法  
     protected abstract void doSomething();  
     //基本方法  
     protected abstract void doAnything();  
     //模板方法  
     public void templateMethod(){  
             /* 
              * 調(diào)用基本方法,完成相關(guān)的邏輯 
              */  
             this.doAnything();  
             this.doSomething();  
     }  
}  
//具體模板類 還可以定義ConcreteClass2,3...
public class ConcreteClass1 extends AbstractClass {  
     //實(shí)現(xiàn)基本方法  
     protected void doAnything() {  
             //業(yè)務(wù)邏輯處理  
     }  
     protected void doSomething() {  
             //業(yè)務(wù)邏輯處理  
     }  
}  
public class Client {  
     public static void main(String[] args) {  
             AbstractClass class1 = new ConcreteClass1();  
             AbstractClass class2 = new ConcreteClass2();                 
             //調(diào)用模板方法  
             class1.templateMethod();  
             class2.templateMethod();  
     }  
}  

14(行為型)命令模式

https://blog.csdn.net/qq_25827845/article/details/52446642

15(行為型)迭代器模式(不需要學(xué)習(xí))

https://blog.csdn.net/qq_25827845/article/details/52496718

16(行為型)觀察者模式 *****

https://www.imooc.com/learn/415
https://www.cnblogs.com/luohanguo/p/7825656.html
https://blog.csdn.net/qq_25827845/article/details/52414289

image.png

17(行為型)調(diào)停者模式

https://blog.csdn.net/qq_25827845/article/details/51925087

18(行為型)狀態(tài)模式

https://blog.csdn.net/qq_25827845/article/details/52468077

19(行為型)策略模式 *****

https://blog.csdn.net/qq_25827845/article/details/51952823
https://blog.csdn.net/u012124438/article/details/70039943
https://www.imooc.com/learn/165

image.png

20(行為型)責(zé)任鏈模式

https://blog.csdn.net/qq_25827845/article/details/51959801

21(行為型)訪問(wèn)者模式

https://blog.csdn.net/qq_25827845/article/details/52061786

22(行為型)備忘錄模式

https://blog.csdn.net/qq_25827845/article/details/52462246

23(行為型)解釋器模式(不需要學(xué)習(xí))

https://blog.csdn.net/qq_25827845/article/details/52496718

參考

https://blog.csdn.net/qq_25827845/article/details/52510803
http://m.itdecent.cn/p/6e5eda3a51af

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 純粹是個(gè)人學(xué)習(xí)總結(jié),如有不對(duì)的地方請(qǐng)吐槽。 設(shè)計(jì)模式參考地址:http://www.cnblogs.com/mao...
    junwu_123閱讀 765評(píng)論 0 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 異步I/O Github Demo 連網(wǎng)是學(xué)習(xí)異步 I/O 的很好基礎(chǔ),而異步 I/O 對(duì)于在 Java 語(yǔ)言中執(zhí)...
    甚了閱讀 894評(píng)論 0 1
  • 再次踏上故鄉(xiāng)的土地,已是五年之后了,是在家鄉(xiāng)的車站里,到處擠滿了春節(jié)采購(gòu)的人群。 工程在加班加點(diǎn)的趕工,寒梅約定好...
    冉冉story閱讀 162評(píng)論 0 0
  • 花了一整個(gè)一月讀完這本《萬(wàn)歷十五年》,開(kāi)始讀的時(shí)候就有朋友建議就著《明朝那些事兒》一起讀,理解會(huì)更深刻而不枯燥,早...
    雪在漠北閱讀 676評(píng)論 0 6

友情鏈接更多精彩內(nèi)容