亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

責任鏈模式

系統 1837 0
Chain of Responsibility(CoR) 是用一系列類(classes)試圖處理一個請求request,這些類之間是一個松散的耦合,唯一共同點是在他們之間傳遞request. 也就是說,來了一個請求,A類先處理,如果沒有處理,就傳遞到B類處理,如果沒有處理,就傳遞到C類處理,就這樣象一個鏈條(chain)一樣傳遞下去。
1) 抽象處理者角色(Handler):它定義了一個處理請求的接口。當然對于鏈子的不同實現,也可以在這個角色中實現后繼鏈。
2) 具體處理者角色(Concrete Handler):實現抽象角色中定義的接口,并處理它所負責的請求。如果不能處理則訪問它的后繼者。
至于類圖不放也罷。畢竟就是一個繼承或者實現。
純與不純
責任鏈模式的純與不純的區別,就像黑貓、白貓的區別一樣。不要刻意的去使自己的代碼來符合一個模式的公式。只要能夠使代碼降低耦合、提高重用,滿足系統需求并能很好的適應變化就好了。正所謂:管它黑貓白貓,抓住老鼠就是好貓!
純的責任鏈模式,規定一個具體處理者角色只能對請求作出兩種動作:自己處理;傳給下家。不能出現處理了一部分,把剩下的傳給了下家的情況。而且請求在責任鏈中必須被處理,而不能出現無果而終的結局。
反之,則就是不純的責任鏈模式。
不純的責任鏈模式還算是責任鏈模式嗎?比如一個請求被捕獲后,每個具體處理者都嘗試去處理它,不管結果如何都將請求再次轉發。我認為這種方式的實現,算不算是責任鏈模式的一種倒不重要,重要的是我們也能從中體味到責任鏈模式的思想:通過將多個處理者之間建立聯系,來達到請求與具體的某個處理者的解耦。

我在代碼中寫了一個Army的Handler類,其中實現它的有陸軍軍士長,陸軍上尉,陸軍上校和將軍,軍士長可以對士兵的請假做審核處理,上尉可以對士兵的破壞請求做處理,上校可以對士兵的諜報請求做處理,而將軍可以對士兵的開戰請求做處理。
handler:
    package pattern.chain;

public abstract class Army {
	protected Army army;

	public Army(Army army) {
		this.army = army;
	}
	Status s;
	public enum Status {
		JIA("請假"), PO("破壞"), DIE("諜報"), KAI("開戰");
		String value = "";

		private Status(String value) {
			this.value = value;
		}

		String getValue() {
			return this.value;
		}
	}

	public void setNext(Army army) {
		this.army = army;

	}

	protected abstract void handler(Status s);

	public void next() {
		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (army != null) {
			army.handler(s);
		}

	}
}

  

    
package pattern.chain;

public class General extends Army {

	public General(Army army) {
		super(army);
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void handler(Status s) {
		this.s = s;
		if (Status.KAI.equals(s)) {
			System.out.println("將軍同意");

		} else {
			next();
		}
	}

}


  

    
package pattern.chain;

public class Colonel extends Army {

	public Colonel(Army army) {
		super(army);
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void handler(Status ss) {
	this.s=ss;
		
		if (Status.DIE.equals(s)) {
			System.out.println("少校同意");
		} else {
			next();		}
	}

}

  

    

package pattern.chain;

public class Captain extends Army {

	public Captain(Army army) {
		super(army);
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void handler(Status ss) {
		this.s = ss;

		if (Status.PO.equals(s)) {
			System.out.println("上尉同意");
		} else {
			next();
		}
	}

}


  

    
package pattern.chain;

public class Commander extends Army {

	public Commander(Army army) {
		super(army);
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void handler(Status ss) {
		this.s = ss;

		if (Status.JIA.equals(s)) {
			System.out.println("士官長同意");
		} else {
			next();
		}
	}

}


  

Test:
    
package pattern.chain;

import pattern.chain.Army.Status;

public class Test {
	public static void main(String[] args) {
		Army gen = new General(null);
		Army col = new Colonel(gen);
		Army cap = new Captain(col);
		Army com = new Commander(cap);
		com.setNext(cap);
		cap.setNext(col);
		col.setNext(gen);
		com.handler(Status.KAI);
	}
}


  

責任鏈模式


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91亚洲在线 | 天天摸夜夜摸爽爽狠狠婷婷97 | 深夜免费在线视频 | 网友自拍视频悠悠在线 | 日韩在线看片中文字幕不卡 | 在线成人免费观看国产精品 | 大伊香蕉在线精品不卡视频 | 久久亚洲欧美成人精品 | 最新中文字幕日本 | 国产99在线观看 | 国产成人久久综合二区 | 国产精品原创巨作无遮挡 | 国产成人综合亚洲动漫在线 | 精品手机在线 | 国产伦理久久精品久久久久 | 亚洲欧美日韩国产精品久久 | 久久久精品国产 | 欧美黑人巨大肥婆性视频 | 亚洲伊人久久大香线蕉啊 | 欧美黑人激情性久久 | 外国成人网在线观看免费视频 | 日本高清一 | 国产片一区二区三区 | 久久久久久久亚洲精品 | 中文字幕久久精品波多野结 | 欧美视频在线观看 | 青青国产成人久久激情911 | 久久国产综合尤物免费观看 | 精品伊人久久大香线蕉网站 | 亚洲乱码中文字幕综合 | 亚洲高清在线视频 | 三a毛片| 999国产高清在线精品 | 精品国产一区二区三区久 | 日韩精品福利 | 神马午夜不卡影院 | 曰本不卡视频 | 中文字幕1区2区 | 奇米影视播放器 | 毛片毛片毛片毛片 | 久久精品这里热有精品 |