国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java經(jīng)典設計模式之責任鏈模式原理與用法詳解

Java經(jīng)典設計模式之責任鏈模式原理與用法詳解

2020-12-11 14:43遲做總比不做強 Java教程

這篇文章主要介紹了Java經(jīng)典設計模式之責任鏈模式,簡單說明了責任鏈模式的概念、原理,并結合實例形式分析了java實現(xiàn)責任鏈模式的具體用法與相關注意事項,需要的朋友可以參考下

本文實例講述了Java經(jīng)典設計模式責任鏈模式。分享給大家供大家參考,具體如下:

責任鏈模式:多個對象由其對象對應下家的引用連成一條鏈,請求在這個鏈上傳遞,直到鏈上的某一個接收對象處理此請求。因為請求的客戶端并不知道鏈上最終是誰來處理這個請求,使得系統(tǒng)可以在不影響客戶端的情況下動態(tài)地重新組織和分配責任,從而避免了請求發(fā)送者與請求處理者之間的耦合。

責任鏈械中涉及到三種角色:

1,抽象處理者角色
2,具體處理者角色
3,請求發(fā)送者

小例子:假設去買房子,買房子就需要砍價, 賣房的人職位不同,可以優(yōu)惠的價格也不同,不同職位就可以形成一個處理請求的鏈。我們暫定: * 基層銷售員,只能優(yōu)惠3% * 銷售經(jīng)理:可以優(yōu)惠5% * 銷售總監(jiān):可以優(yōu)惠8% * 老板(Boss):優(yōu)惠10%

直接上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * 抽象處理者(Handler)角色:處理請求的接口。如果需要,接口可以定義 出一個方法以設定和返回對下家的引用。
 * 這個角色通常由一個Java抽象類或者Java接口實現(xiàn)。抽象方法handlePriceRequest()規(guī)范了子類處理請求的操作。
 * @date 2015-12-24 上午11:26:56
 */
public abstract class RoomRateHandler {
protected RoomRateHandler mHandler;
//直接由子類繼承,用于傳遞請求
public void setPriceHandler(RoomRateHandler mHandler){
this.mHandler=mHandler;
}
//處理具體問題:處理價格請求
public abstract void handlePriceRequest(float discount);
/**
* 設置請求處理鏈的層次關系 ,獲取處理請求的對象
* @description:
* @date 2015-12-24 上午11:51:54
*/
public static RoomRateHandler cretateHandler(){
RoomRateHandler salesMan=new SalesMan();
RoomRateHandler salesManager=new SalesManager();
RoomRateHandler saleDirector=new SalesDirector();
RoomRateHandler topManager=new TopManager();
salesMan.setPriceHandler(salesManager);
salesManager.setPriceHandler(saleDirector);
saleDirector.setPriceHandler(topManager);
return salesMan;
}
}

具體處理者(SalesMan)角色

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * 具體處理者(SalesMan)角色:具體處理者(SalesDirector)角色:具體處理者收到請求后,可以選擇處理請求,也可以將請求傳給下家(上級)。
 * 具體處理者都持有對鏈上下家(上級)對象的引用,因此具體處理者把請求傳遞下去。
 * @description:
 * @date 2015-12-24 上午11:29:16
 */
public class SalesMan extends RoomRateHandler {
@Override
public void handlePriceRequest(float discount) {
if(discount<=0.03){
System.out.format("%s批準了:%.3f%n","業(yè)務員",discount);
}else{
mHandler.handlePriceRequest(discount);
}
}
}

具體處理者(SalesManager)角色

?
1
2
3
4
5
6
7
8
9
10
public class SalesManager extends RoomRateHandler {
@Override
public void handlePriceRequest(float discount) {
if(discount<=0.08){
System.out.format("%s批準了:%.3f%n","銷售經(jīng)理",discount);
}else{
mHandler.handlePriceRequest(discount);
}
}
}

具體處理者(SalesDirector )角色

?
1
2
3
4
5
6
7
8
9
10
public class SalesDirector extends RoomRateHandler {
@Override
public void handlePriceRequest(float discount) {
if(discount<=0.05){
System.out.format("%s批準了:%.3f%n","銷售總監(jiān)",discount);
}else{
mHandler.handlePriceRequest(discount);
}
}
}

具體處理者(TopManager)角色

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * 具體處理者(TopManager)角色:因為當前 角色已經(jīng)處于鏈尾,所以是最終處理了。
 * @description:
 * @author ldm
 * @date 2015-12-24 上午11:29:16
 */
public class TopManager extends RoomRateHandler {
@Override
public void handlePriceRequest(float discount) {
if (discount <= 0.1) {
System.out.format("%s批準了:%.3f%n", "老板", discount);
}
else {
System.out.format("%s不同意:%.3f%n", "老板", discount);
}
}
}

請求發(fā)送者

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
 * 發(fā)出請求的客戶(模擬買房子的人)
 * @description:
 * @author ldm
 * @date 2015-12-24 上午11:35:54
 */
public class Customer {
private RoomRateHandler mHandler;
public void setPriceHandler(RoomRateHandler mHandler) {
this.mHandler = mHandler;
}
public void requestDiscount(float discount) {
mHandler.handlePriceRequest(discount);
}
public static void main(String[] args) {
Customer customer = new Customer();
customer.setPriceHandler(RoomRateHandler.cretateHandler());//獲取處理對象,站你面前的可能是老板,也可能是業(yè)務員...
Random random = new Random();
for (int i = 0; i < 8; i++) {// 隨機構造8個買房子的人
System.out.println(i + "---");
customer.requestDiscount(random.nextFloat()/10);//處理價格(談判)
}
}
}

處理結果

Java經(jīng)典設計模式之責任鏈模式原理與用法詳解

如果要增加層級怎么辦呢?很簡單,比如增加銷售主管SalesSupervisor,我們只需要新建一個類SalesSupervisor extends RoomRateHandler,實現(xiàn)處理方法handlePriceRequest(float discount);同時不要忘記在RoomRateHandler類中cretateHandler()中設置好對應的層級鏈就可以啦。

希望本文所述對大家java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99热激情| 国产在线小视频 | 精品国产乱码久久久久久1区2区 | 国内精品一区二区 | 成人高清视频在线观看 | 日韩一区二区影视 | 欧美激情五月 | 中文字幕1区2区3区 日韩免费高清视频 | 亚洲综合首页 | 亚洲黄色一区二区 | www.99精品| 欧美狠狠操 | 日本韩国欧美一区 | 青青草亚洲 | 九九综合九九 | 国产亚洲精品久久久久久久 | 免费观看a视频 | 精品久久av | 国产精品久久久久久久久久久久久久久久 | 2018啪一啪 | 色综合天天综合网国产成人网 | 中文字幕成人 | 亚洲一区精品在线 | 伊人伊成久久人综合网站 | 国产精品毛片一区二区三区 | www.国产精| 中文字幕视频二区 | 国产在线观看一区二区三区 | 日韩城人网站 | 色播久久 | 亚洲精品久久久久中文字幕欢迎你 | 亚洲日本va中文字幕 | 国产亚洲一区二区三区在线观看 | 综合色吧| 丁香综合| 国产福利视频 | 大香一网 | 久久久精彩 | 狠狠干美女 | 欧美一区二区三区免费观看视频 | 欧美日韩精品一区二区三区 |