1、設(shè)計(jì)模式分類:
- 創(chuàng)建型模式,共五種:
工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 - 結(jié)構(gòu)型模式,共七種:
適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。 - 行為型模式,共十一種:
策略模式、模板方法模式、觀察者模式、迭代子模式、責(zé)任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式。
2、適配器模式:
優(yōu)點(diǎn)和應(yīng)用場景:
復(fù)用性:系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)需要。那么可以通過適配器模式將這些功能更好的復(fù)用。
擴(kuò)展性:在實(shí)現(xiàn)適配器功能的時(shí)候,可以自己定義想要的方法而不改變?cè)瓉淼念?,從而自然的擴(kuò)展系統(tǒng)的功能。
類適配器和對(duì)象適配器區(qū)別
類適配器,由于是繼承,所以無法和源類的子類一起工作,而對(duì)象適配器可以把源類和它的子類都適配到目標(biāo)接口。
類適配器可以重新定義父類的部分方法,而對(duì)象適配器就比較困難。
盡量使用對(duì)象適配器,多用 合成/聚合,少用繼承。
3、代理模式:
定義及應(yīng)用場景:
為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問,替原對(duì)象進(jìn)行一些操作,比如中介;如果已有的方法在使用時(shí)需要對(duì)原方法進(jìn)行改進(jìn),比如前置檢測(cè),后置記錄日志,這個(gè)時(shí)候使用代理類。
java動(dòng)態(tài)代理
如果代理類程序運(yùn)行前并不存在,需要在程序運(yùn)行時(shí)動(dòng)態(tài)生成(無需收工編寫代理類源碼),這時(shí)候就用動(dòng)態(tài)代理
如何生成:根據(jù)java的反射機(jī)制動(dòng)態(tài)生成的。
Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler handler);
Spring的AOP就是典型的動(dòng)態(tài)代理應(yīng)用。
4、觀察者模式:
解決的問題和應(yīng)用場景
定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生變化時(shí),所依賴它的對(duì)象得到通知并被自動(dòng)更新。此模式通常用來處理事件處理系統(tǒng)。
通知代替輪詢。解耦觀察者和被觀察者,避免直接調(diào)用。