概述
為什么學(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
1(創(chuàng)建型)單例模式 *****
https://blog.csdn.net/qq_25827845/article/details/51150165

餓漢式
//空間換時(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

3(創(chuàng)建型)抽象工廠模式 *****
https://blog.csdn.net/qq_25827845/article/details/52503884

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

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

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
模板方法模式

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

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

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
