UML關(guān)系簡單介紹
UML簡單使用的介紹
創(chuàng)建型設(shè)計模式
Android設(shè)計模式-單例模式
Android設(shè)計模式-工廠模式
Android設(shè)計模式-抽象工廠模式
Android設(shè)計模式-建造者模式
Android設(shè)計模式-原型模式
結(jié)構(gòu)型設(shè)計模式
Android設(shè)計模式-代理模式
Android設(shè)計模式-裝飾模式
Android設(shè)計模式-適配器模式
Android設(shè)計模式-組合模式
Android設(shè)計模式-門面模式
Android設(shè)計模式-橋接模式
Android設(shè)計模式-享元模式
行為型設(shè)計模式
Android設(shè)計模式-策略模式
Android設(shè)計模式-命令模式
Android設(shè)計模式-責(zé)任鏈模式
Android設(shè)計模式-模版方法模式
Android設(shè)計模式-迭代器模式
Android設(shè)計模式-觀察者模式
Android設(shè)計模式-備忘錄模式
Android設(shè)計模式-中介者模式
Android設(shè)計模式-訪問者模式
Android設(shè)計模式-狀態(tài)模式
Android設(shè)計模式-解釋器模式
1.定義
使多個對象都有機(jī)會處理請求,從而避免了請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈粟誓,并沿著這條鏈傳遞該請求隙畜,直到有對象處理它位置。
責(zé)任鏈模式UML圖
角色介紹
- Handler 抽象處理者,抽象出問題處理的方法东揣,并持有下一個處理者的引用
- ConcreteHandler 具體處理者践惑,繼承抽象,并實現(xiàn)具體的方法
- Client 客戶端嘶卧,調(diào)用的地方0.0
責(zé)任鏈的核心在具體處理者上尔觉,鏈?zhǔn)怯啥鄠€具體處理者組成的。
3.簡單實現(xiàn)
3.1抽象處理者
public abstract class Handler {
private Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
//此處結(jié)合了模版方法模式芥吟,后續(xù)介紹
public final void handlerMessage(String request){
//此處的判斷邏輯根據(jù)具體的業(yè)務(wù)修改侦铜,這里就是做個簡單的示范
if (request.contains("111")){
System.out.println("本節(jié)點處理");
dealMessage();
}else {
if (this.nextHandler!=null){
System.out.println("傳遞到了下一節(jié)點");
this.nextHandler.handlerMessage(request);
}else {
System.out.println("沒有下一節(jié)點了。钟鸵。钉稍。怎么處理看具體業(yè)務(wù)了");
}
}
}
public abstract void dealMessage();
}
3.2具體處理者
public class ConcreteHandler1 extends Handler {
@Override
public void dealMessage() {
System.out.println("節(jié)點1處理了任務(wù)");
}
}
public class ConcreteHandler2 extends Handler {
@Override
public void dealMessage() {
System.out.println("節(jié)點2處理了任務(wù)");
}
}
3.3客戶端調(diào)用
public class MyClass {
public static void main(String args[]) {
//一般關(guān)于鏈的設(shè)置也不會在高層模塊中設(shè)置,此處是做個示范
Handler handler1=new ConcreteHandler1();
Handler handler2=new ConcreteHandler2();
handler1.setNextHandler(handler2);
handler1.handlerMessage("111111");
System.out.println("---------分割線--------");
handler1.handlerMessage("222222");
}
}
打印結(jié)果
本節(jié)點處理
節(jié)點1處理了任務(wù)
---------分割線--------
傳遞到了下一節(jié)點
沒有下一節(jié)點了棺耍。贡未。。怎么處理看具體業(yè)務(wù)了
具體使用中蒙袍,一般關(guān)于鏈的設(shè)置也不會在高層模塊中設(shè)置俊卤,而是封裝出一個封裝類,在需要使用的時候返回鏈的第一個節(jié)點對象即可正常使用害幅。
4.總結(jié)
- 優(yōu)點 將請求和處理分開消恍,請求者不用直到是誰處理的,處理者不用直到請求的全貌矫限,兩者解耦哺哼,提高了系統(tǒng)的靈活性。
- 缺點 鏈條特長的時候很麻煩吧叼风。取董。畢竟類似于遞歸