日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

責(zé)任鏈模式

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

我在代碼中寫了一個(gè)Army的Handler類,其中實(shí)現(xiàn)它的有陸軍軍士長(zhǎng),陸軍上尉,陸軍上校和將軍,軍士長(zhǎng)可以對(duì)士兵的請(qǐng)假做審核處理,上尉可以對(duì)士兵的破壞請(qǐng)求做處理,上校可以對(duì)士兵的諜報(bào)請(qǐng)求做處理,而將軍可以對(duì)士兵的開戰(zhàn)請(qǐng)求做處理。
handler:
    package pattern.chain;

public abstract class Army {
	protected Army army;

	public Army(Army army) {
		this.army = army;
	}
	Status s;
	public enum Status {
		JIA("請(qǐng)假"), PO("破壞"), DIE("諜報(bào)"), KAI("開戰(zhàn)");
		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("士官長(zhǎng)同意");
		} 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);
	}
}


  

責(zé)任鏈模式


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 民权县| 都兰县| 绥芬河市| 巴林左旗| 长春市| 塔城市| 班戈县| 轮台县| 河池市| 磐安县| 六枝特区| 阳西县| 汾阳市| 丰顺县| 高邑县| 清流县| 渭南市| 平阳县| 石屏县| 阳曲县| 佳木斯市| 文登市| 株洲市| 邛崃市| 峨眉山市| 富蕴县| 阿瓦提县| 弥勒县| 达州市| 邛崃市| 峡江县| 贵溪市| 含山县| 渝北区| 溆浦县| 闽清县| 泾川县| 上犹县| 清镇市| 安徽省| 玉树县|