設計模式之責任鏈模式

2021-10-03 13:29:27 字數 2061 閱讀 3139

1 背景

系統中由一批訂單,每條訂單都有乙個渠道chlid,功能是要完成根據不同的渠道,發給不同的渠道

不同的渠道傳送方式不同,例如 chlid=1 要做傳送簡訊, chlid=2 要傳送mq, chlid=3 通過介面呼叫傳送到第三方.

package com.sitech.mkt.duty;

/** * @oauth: qiangsw

* @date: 2020/1/22 10:00

* @description: com.sitech.mkt.duty

* @doc:

*/public abstract class smssupprot

public void supportresolve(int chlid) else }}

public abstract boolean resolve(int chlid);

/*** 簡訊渠道

** @param contactorder

* @return

*/public boolean done(int chlid) else if (null != this.next)

return false;

}public void success(int chlid)

public void fail(int chlid)

}

package com.sitech.mkt.duty;

import com.sitech.crmtpd.market.domain.contactorder;

/** * @oauth: qiangsw

* @date: 2020/1/22 11:06

* @description: com.sitech.mkt.duty

* @doc:

*/public class nosupport extends smssupprot

/*** 開始執行責任

* @param contactorder

* @return

*/@override

public boolean resolve(contactorder contactorder)

}

package com.sitech.mkt.duty;

/** * @oauth: qiangsw

* @date: 2020/1/22 13:19

* @description: com.sitech.mkt.duty

* @doc: 傳送mq

*/public class hopushjt extends smssupprot

/*** 傳送mq

** @param contactorder

* @return

*/@override

public boolean resolve(int chlid) else if (null != this.next)

return false;

}}

package com.sitech.mkt.duty;

/** * @oauth: qiangsw

* @date: 2020/1/22 13:19

* @description: com.sitech.mkt.duty

* @doc: 通過http傳送

/*** 傳送mq

** @param contactorder

* @return

*/@override

public boolean resolve(int chlid) else if (null != this.next)

return false;

}}

//呼叫方法

public static void main(string args)

設計模式之 責任鏈模式

在一些情況下,對乙個訊息 含事件 的響應和處理需要很多物件來參與,這些物件對訊息的處理有前後順序,形成乙個處理鏈條,但物件是否真正處理訊息有賴於在它之前的物件的處理策略,前乙個物件處理後,後乙個物件則不需參與處理,這就是責任鏈模式。現實中有很多類似的場景,比如上訪,上訪一般是從最基層的信訪部門接受信...

設計模式之(責任鏈模式)

chain of responsibleity 責任鏈模式 在責任鏈模式 中,很多物件由每乙個物件對其下家的引用而接。起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。客戶並不知道鏈上的哪乙個物件最終處理這個請求,系統可以在不影響客戶端的情況下動態的重新組織鏈和分配責任。處理者...

設計模式之責任鏈模式

假設現在乙個公司的請假流程如下 一天及以下由小組組長審批,一天以上三天以下由經理審批,三天以上七天以下由老闆審批,七天以上直接勸退。如果每次請假時都很長的if else 來判斷該去找誰請假,很不容易擴充套件,我們使用責任鏈模式來實現。首先,是乙個抽象的父類 public abstract class...