中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

西安網(wǎng)站建設(shè)云李百度知道合伙人官網(wǎng)登錄入口

西安網(wǎng)站建設(shè)云李,百度知道合伙人官網(wǎng)登錄入口,建設(shè)什么網(wǎng)站好,wordpress網(wǎng)站前言 筆者是金融保險行業(yè),有這么一種場景,業(yè)務(wù)員錄完單后提交核保,這時候系統(tǒng)會對保單數(shù)據(jù)進行校驗,如不允許手續(xù)費超限校驗,客戶真實性校驗、費率限額校驗等等,當(dāng)校驗一多時,維護起來特別麻煩…

前言

筆者是金融保險行業(yè),有這么一種場景,業(yè)務(wù)員錄完單后提交核保,這時候系統(tǒng)會對保單數(shù)據(jù)進行校驗,如不允許手續(xù)費超限校驗,客戶真實性校驗、費率限額校驗等等,當(dāng)校驗一多時,維護起來特別麻煩,代碼耦合度太高。

這里使用責(zé)任鏈模式,將每個校驗?zāi)K之間互相獨立,在后面新增校驗時,只需要往容器中插入即可,且可以給每個模塊賦予優(yōu)選級進行排序,利于管理。與Spring框架結(jié)合,利于類的管理。

正文

在這里插入圖片描述

處理器模板

public interface CheckProcessor {/*** 邏輯處理* @param policyInfo* @param exposeProcessor*/public void invoke(PolicyInfo policyInfo,ExposeProcessor exposeProcessor) throws Exception;
}

處理器實現(xiàn)類

手續(xù)費校驗器

public class CommissionRateCheckProcessor implements CheckProcessor {@Overridepublic void invoke(PolicyInfo policyInfo, ExposeProcessor exposeProcessor) throws Exception {System.out.println("完成手續(xù)費校驗");//調(diào)用下個處理器exposeProcessor.invoke(policyInfo);}
}

客戶真實性校驗器

public class CustomerCheckProcessor implements CheckProcessor {@Overridepublic void invoke(PolicyInfo policyInfo, ExposeProcessor exposeProcessor) throws Exception {System.out.println("完成客戶真實性校驗");//調(diào)用下個處理器exposeProcessor.invoke(policyInfo);}
}

保險費率校驗器

public class PremiumRateCheckProcessor implements CheckProcessor {@Overridepublic void invoke(PolicyInfo policyInfo, ExposeProcessor exposeProcessor) throws Exception {System.out.println("完成保險費率校驗");//調(diào)用下個處理器exposeProcessor.invoke(policyInfo);}
}

入口管理類

public class ExposeProcessor {private  int index;private  static List<CheckProcessor> processor=new ArrayList();static {setProcessor(new CustomerCheckProcessor());setProcessor(new CommissionRateCheckProcessor());setProcessor(new PremiumRateCheckProcessor());}/*** 處理器*/public  void invoke(PolicyInfo policyInfo) throws Exception {//獲取容器中所有的處理器List processors = getProcessors();if (processors.size()==0||index==processors.size()){return;}//根據(jù)指針指向,調(diào)用處理器。并把指針指向下一個CheckProcessor processor = (CheckProcessor)processors.get(index++);//調(diào)用處理器processor.invoke(policyInfo,this);}/*** 處理器集*/private  List getProcessors(){return processor;}public static void setProcessor(CheckProcessor checkProcessor){processor.add(checkProcessor);}}
  1. 獲取容器中的校驗器
  2. 校驗是否往下執(zhí)行,如果處理器數(shù)量為空,或者當(dāng)前指針已經(jīng)指向尾部時,則不再往下執(zhí)行
  3. 將管理器以及請求參數(shù)傳遞到處理器中進行處理
  4. 處理器執(zhí)行完畢后,調(diào)用管理器的invoke方法來啟動責(zé)任鏈中的下個處理器

測試用例

    public static void main(String[] args) {ExposeProcessor exposeProcessor=new ExposeProcessor();try {exposeProcessor.invoke(new PolicyInfo());} catch (Exception e) {e.printStackTrace();}}

在這里插入圖片描述

以前代碼有很多可以改進的地方,如與IOC框架結(jié)合,將每個處理器交給IOC容器進行管理,在獲取處理器方法中可以直接從IOC容器中獲取CheckProcessor 類型的所有實現(xiàn)類。

結(jié)合Spring IOC

@Service
public class ExposeProcessor implements ApplicationContextAware {private ApplicationContext applicationContext;private  int index;private  List<CheckProcessor> processor=new ArrayList();/*** 處理器*/public  void invoke(PolicyInfo policyInfo) throws Exception {List processors = getProcessors();if (processors.size()==0||index==processors.size()){return;}CheckProcessor processor = (CheckProcessor)processors.get(index++);processor.invoke(policyInfo,this);}/*** 處理器集*/private  List getProcessors(){Map<String, CheckProcessor> beansOfType = this.applicationContext.getBeansOfType(CheckProcessor.class);return beansOfType.values().stream().collect(Collectors.toList());}public void setProcessor(CheckProcessor checkProcessor){processor.add(checkProcessor);}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext=applicationContext;}
}
  1. 管理類實現(xiàn)ApplicationContextAware接口,并重寫其setApplicationContext方法,將IOC上下文對象保存下來。
  2. 從IOC容器中獲取類型為CheckProcessor 的類
  3. 將管理類加上@Service注解交由IOC容器進行管理
  4. 在所有的校驗器實現(xiàn)類上都加上@Service注解,交由IOC容器管理

測試:

    public static void main(String[] args) {//創(chuàng)建Spring IOC容器,開啟注解掃碼AnnotationConfigApplicationContext annotationConfigApplicationContext=new AnnotationConfigApplicationContext("com.mashibing.dp.intepreter");//獲取管理類ExposeProcessor exposeProcessor= (ExposeProcessor) annotationConfigApplicationContext.getBean("exposeProcessor");try {exposeProcessor.invoke(new PolicyInfo());} catch (Exception e) {e.printStackTrace();}}

由于項目非Spring web項目,所以必須啟動Spring IOC容器,指定包路徑對注解進行掃碼,這樣才能將類交由容器進行管理,不然獲取會為空。

在這里插入圖片描述

總結(jié)

責(zé)任鏈模式有多種寫法,具體需要根據(jù)業(yè)務(wù)場景進行定制化開發(fā)。

責(zé)任鏈模式的優(yōu)點:

  • 降低耦合度。它將請求的發(fā)送者和接收者解耦
  • 簡化了對象。使得對象不需要知道鏈的結(jié)構(gòu)。
  • 增強給對象指派職責(zé)的靈活性。通過改變鏈內(nèi)的成員或者調(diào)動它們的次序,允許動態(tài)地新增或者刪除責(zé)任。
  • 增加新的請求處理類很方便。

責(zé)任鏈模式的缺點

  • 不能保證請求一定被接收。
  • 系統(tǒng)性能將受到一定影響,而且在進行代碼調(diào)試時不太方便,可能會造成循環(huán)調(diào)用。
  • 可能不容易觀察運行時的特征,有礙于除錯。
http://www.risenshineclean.com/news/54393.html

相關(guān)文章:

  • 美工網(wǎng)站做兼職企業(yè)網(wǎng)絡(luò)推廣網(wǎng)站
  • 網(wǎng)站更改機房備案個人網(wǎng)站制作
  • 福建企業(yè)網(wǎng)站開發(fā)純手工seo公司
  • 貴陽雙龍區(qū)建設(shè)局網(wǎng)站谷歌搜索引擎香港免費入口
  • 政府采購網(wǎng)上商城網(wǎng)站成都專門做網(wǎng)站的公司
  • 廈門網(wǎng)站建設(shè)哪家公司好實時熱榜
  • 網(wǎng)站跳轉(zhuǎn)怎么辦瀏覽器下載安裝2023版本
  • 網(wǎng)站優(yōu)化網(wǎng)絡(luò)推廣seo班級優(yōu)化大師的利和弊
  • 做機械設(shè)備網(wǎng)站成都網(wǎng)站建設(shè)軟件
  • 學(xué)校網(wǎng)站建設(shè)經(jīng)驗介紹什么是網(wǎng)絡(luò)營銷策劃
  • 攜程特牌 的同時做別的網(wǎng)站自己如何制作一個網(wǎng)站
  • 做展柜平時在哪里網(wǎng)站推廣全國十大教育機構(gòu)
  • 珠寶網(wǎng)站建設(shè)平臺分析報告網(wǎng)站構(gòu)建的基本流程
  • 連鎖酒店網(wǎng)站建設(shè)網(wǎng)站優(yōu)化推廣方案
  • 網(wǎng)站開發(fā)工具安全性能怎樣制作一個網(wǎng)站
  • 網(wǎng)站開發(fā)技術(shù)有廣州疫情最新數(shù)據(jù)
  • 做模具的網(wǎng)站sem競價推廣怎么做
  • 客戶網(wǎng)站回訪長春百度快速優(yōu)化
  • 網(wǎng)站開發(fā)用c語言嗎網(wǎng)站網(wǎng)絡(luò)營銷公司
  • 為什么 要建設(shè)網(wǎng)站掃一掃識別圖片
  • 網(wǎng)站制作策劃書最新域名8xgmvxyz
  • 長春專業(yè)做網(wǎng)站公司排名手機優(yōu)化大師官方版
  • 網(wǎng)站通欄南京seo網(wǎng)站管理
  • 基于jsp網(wǎng)站開發(fā)與實現(xiàn)和生活app下載安裝最新版
  • 好用的免費建站網(wǎng)站百度網(wǎng)絡(luò)營銷中心
  • 在靜安正規(guī)的設(shè)計公司網(wǎng)站個人博客登錄入口
  • 卡通網(wǎng)站建設(shè)濟南頭條新聞熱點
  • 正規(guī)的培訓(xùn)行業(yè)網(wǎng)站開發(fā)seo關(guān)鍵詞如何布局
  • 在中國做博彩網(wǎng)站違法嗎seo網(wǎng)站優(yōu)化服務(wù)商
  • wap asp網(wǎng)站模板下載淘寶怎樣優(yōu)化關(guān)鍵詞