JAVA 設計模式

2021-08-16 22:41:12 字數 2646 閱讀 7109

建立式模式:抽象工廠/建造者/工廠方法/原型/單例

構造型模式:介面卡/橋接/組合/裝飾/外觀/享元/**

行為型模式:責任鏈/命令/直譯器/迭代子/中介者/備忘錄/觀察者/狀態/策略/模板方法/訪問者

**模式:使用乙個新的**類為目標類(被**類)進訪問的控制,與裝飾者模式不同,**類物件可以有多個目標類,控制的目的是為了在呼叫目標類方法之前或之後執行某些其他操作、或者增強或減弱目標類的某些方法中的功能,作為乙個委託者起到不改變目標類的核心**就能夠實現功能的增強或新功能的新增的作用。

靜態**:當被**類(目標類)與**類(委託類)在程式執行之前已經存在,即執行前就確定了關係生成了位元組碼檔案,這種由委託類和目標類形成的**關係就是靜態**。

**例項:(經紀人**明星)【前提是經紀人和明星實現了相同介面】

介面:

/** * 介面(目標類和委託類必須實現同乙個介面)

*/public inte***ce star

委託類:

/** * 經紀人類(作為委託類),要和目標類實現相同的介面

* 可以**多個實現了相同介面的目標物件(通過建構函式傳入例項物件的引用,面向介面程式設計、多型)

*/ public class agent implements star

private void actionbefore()

@override

public void action()

private void actionafter()

}目標類:

public class songer implements star

}public class actor implements star

}測試當前例項的測試類:

public class staticproxytest

}1.**物件服務於實現了相同介面的物件,如果要**的方法很多,勢必要為每一種方法都進行**,靜態**在程式規模稍大時就無法勝任了。

2.如果介面增加乙個方法,除了所有委託類需要實現這個方法外,所有**類也需要實現此方法。增加了**維護的複雜度。

動態**:(基於jdk的動態**\proxy方式)

動態**它可以直接給某乙個目標物件(委託物件)生成乙個**物件,而不需要**類存在。動態**與靜態**模式原理是一樣的,只是動態**類的原始碼是在程式執行期間由jvm根據反射等機制動態的生成,所以不存在**類的位元組碼檔案。**類和委託類的關係是在程式執行時確定。

**例項:(也用經紀人**明星這個例子)【前提是經紀人和明星實現了相同介面】

介面:/**

* 介面(目標類和委託類必須實現同乙個介面)

*/public inte***ce star

目標類:

public class songer implements star }

委託類由jvm通過反射動態生成

/***

* @param proxy 當前建立出來的動態**物件

* @param method 當前呼叫的方法物件

* @param args 呼叫的方法引數

* @return

* @throws throwable

*/@override

public object invoke(object proxy, method method, object args) throws throwable

private void actionbefore()

private void actionafter()

} 結合proxy類生成**物件

invocationhandlerimp invocationhandlerimp = new invocationhandlerimp(star);

//引數一是乙個類載入器

//引數二是目標類上的所有介面的位元組碼物件

//引數三是委託者的呼叫處理者物件

star starproxy= (star) proxy.newproxyinstance(this.getclass().getclassloader(), songer.class.getinte***ces(), invocationhandlerimp); }

測試類**:

public class dynamicproxytest

}

動態**:(基於cglib的動態**\enhancer方式)

如果真實類是乙個普通類,沒有實現介面,那麼就採用這種方式, 建立出來真實類的子類作為**類,是繼承關係

測試例項:(同上)

/*** 如果真實類是乙個普通類,沒有實現介面,那麼就採用這種方式, 建立出來真實類的子類作為**類。

*/public class dynamicproxycglibtest

});//建立**物件呼叫**方法

songer s = (songer)enhancer.create();

s.action();

}private void actionbefore()

private void actionafter()

}}

java設計模式

a categorization of patterns by intent intent patterns inte ces adapter,facade,composite,bridge responsibility singleton,observer,mediator,proxy,chain...

JAVA設計模式

設計模式 設計模式分類 設計模式分為三類,建立型模式,結構型模式,行為型模式 建立型模式 1 工廠方法模式 2 抽象工廠模式 3 單例模式 4 建造者模式 5 原型模式 結構型模式 1 介面卡模式 2 裝飾器模式 3 模式 4 外觀模式 5 橋接模式 6 組合模式 7 享元模式 行為型模式 1 策略...

JAVA設計模式

介面卡模式 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本不相容的類可以合作無間。外觀模式 提供了乙個統一的介面,用來訪問子系統中的一群介面。外觀定義了乙個高層介面,讓子系統更容易使用。模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演...