Hessian源碼分析之設計模式篇(八)

Hessian源碼已經分析完了,在Hessian中主要使用到了兩個設計模式,一個是策略模式,一個是模板方法模式

我們先來看看策略模式

在Hessian中向流中寫數據都是通過Serializer接口的writeObject方法來實現的,而根據寫出的對象的不同對應着很多的具體的實現類,類圖如下(只畫出了部分實現類)


因爲對於不同類型的參數寫出到輸出流的方式是不一樣的,如果用if...else...來實現的話,每增加一種新的類型都要修改,不僅容易出錯而且不易維護

策略模式的使用場景如下

多個類只有在算法或者行爲上稍有不同

策略模式的優點如下

1、策略可以自由切換:只要實現抽象策略,就可以成爲策略家族的一個成員,通過角色對其封裝,保證對外提供“可自由切換”的策略

2、避免使用多重條件判斷:多重條件判斷極容易出錯,尤其是在具體策略邏輯複雜的情況下

3、擴展性良好:在現有的系統中增加一個策略只要實現接口就可以了,其他都不用修改,類似於一個可反覆拆卸的插件

模板方法模式

HessianOutput類的call()方法負責將rpc調用過程中的方法信息和參數信息寫到流中,代碼如下

  public void call(String method, Object []args)
    throws IOException
  {
    int length = args != null ? args.length : 0;
    
    startCall(method, length);
    
    for (int i = 0; i < length; i++)
      writeObject(args[i]);
    
    completeCall();
  }
對於所有的rpc調用在寫出方法信息上和寫結尾信息上都是沒有區別的,只有在寫出具體參數的實現是不一樣的,所以Hessian將寫出方法信息放到了startCall方法中,結尾信息放到了completeCall()方法中,而具體的參數放到了writeObject()方法放到具體的子類中實現

模板方法的使用場景如下

1、多個子類有公有的方法,並且邏輯基本相同時

2、重要,複雜的算法,可以把核心算法設計爲模板放方法,周邊的相關細節功能由各個子類實現

模板方法的優點如下

1、封裝不變部分,擴展可變部分

2、提取公共部分代碼,便於維護

3、行爲由父類控制,子類提供具體實現




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章