顧名思義,責任鏈模式(Chain of Responsibility Pattern)爲請求建立了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬於行爲型模式。程序員
在這種模式中,一般每一個接收者都包含對另外一個接收者的引用。若是一個對象不能處理該請求,那麼它會把相同的請求傳給下一個接收者,依此類推。設計模式
簡單的說就是: 你處理不了的事情就交給你的下一級(級別更高)的去處理。
話很少說直接上代碼
建立一個抽象的程序員類:AbstractCoder
ide
public abstract class AbstractCoder { public static int SIMPLEBUG = 1; public static int COMPLEXBUG = 2; public static int DIFFICULTBUG = 3; protected int level; protected AbstractCoder nextCoder; public void setNextCoder(AbstractCoder nextCoder) { this.nextCoder = nextCoder; } public void resolveBug(int level, String message) { //大於處理的權限 if (this.level < level) { nextCoder.resolveBug(level, message); } else { write(message); } } abstract protected void write(String message); }
建立不一樣的程序員類去擴展抽象類,每一個程序員作着不一樣的事情。性能
LongHairCoder
:this
public class LongHairCoder extends AbstractCoder { public LongHairCoder(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("初級程序員處理:" + message); } }
ShortHairCoder
:設計
public class ShortHairCoder extends AbstractCoder { public ShortHairCoder(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("禿頭程序員處理:" + message); } }
BaldHeadCoder
:調試
public class BaldHeadCoder extends AbstractCoder { public BaldHeadCoder(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("光頭程序員處理:" + message); } }
實現責任鏈: ChainPatternDemo
code
public class ChainPattern { public static AbstractCoder getChainOfLoggers() { AbstractCoder longHairCoder = new LongHairCoder(AbstractCoder.SIMPLEBUG); AbstractCoder shortHairCoder = new ShortHairCoder(AbstractCoder.COMPLEXBUG); AbstractCoder baldHeadCoder = new BaldHeadCoder(AbstractCoder.DIFFICULTBUG); longHairCoder.setNextCoder(shortHairCoder); shortHairCoder.setNextCoder(baldHeadCoder); return longHairCoder; } public static void main(String[] args) { AbstractCoder abstractCoder = getChainOfLoggers(); abstractCoder.resolveBug(AbstractCoder.SIMPLEBUG, "一個簡單的bug"); abstractCoder.resolveBug(AbstractCoder.COMPLEXBUG, "一個複雜的bug"); abstractCoder.resolveBug(AbstractCoder.DIFFICULTBUG, "一個困難的bug"); } }
執行結果:對象
初級程序員處理:一個簡單的bug 禿頭程序員處理:一個複雜的bug 光頭程序員處理:一個困難的bug