デザインパターンとアメリカ - 構造 - アダプタモード(XXII)

説明

このモデルは、適応のために使用され、それが一緒に作業するために協力することとしないので、非互換インタフェースの元のクラスを可能にする互換インタフェース互換インタフェースに変換されません

アプリケーションのソースコード

「SpringMVCソースコード読み取り - 主要な要求の処理フローのDispatcherServlet(D)」

ハンドルは、オブジェクトがHandleAdapterによって異なるハンドル適応インターフェースを処理する異なる方法のいずれかで存在してもよいです 

継承に基づいて

// 类适配器:基于继承
パブリック インターフェイスITarget {
   無効F1();
  F2();
  FC(); 
} 

パブリック クラスAdaptee {
   公共 ボイド FA(){ // ...} 
  公共 ボイド FB(){ // ...} 
  公共 ボイド FC(){ // ...} 
} 

パブリック クラスアダプタが延び Adaptee 実装{ITargetを
   公共 のボイドF1(){
     スーパーの.Fa(); 
  }
  
  公共 ボイドF2(){
     // ...再実装のF2()... 
  } 
  
  // ここでFC()必要が実装直接最大の違いを持つオブジェクトアダプタであるAdaptee、から継承されていません
}

の組み合わせに基づいて、

// 对象适配器:基于组合
パブリック インターフェイスITarget {
   無効F1();
  F2();
  FC(); 
} 

パブリック クラスAdaptee {
   公共  FA(){ // ...} 
  パブリック 無効 FB(){ // ...} 
  パブリック 無効 FC(){ // ...} 
} 

パブリック クラスアダプタを実装ITarget {
   プライベートAdaptee adaptee; 
  
  パブリックアダプタ(Adapteeのadaptee){
     この .adaptee =Adaptee; 
  } 
  
  公共 ボイドF1(){ 
    adaptee.fa(); // Adapteeに委託
  } 
  
  公共 ボイドF2(){
     // ...再実装F2()... 
  } 
  
  公共 ボイドFC(){ 
    adaptee.fc (); 
  } 
}

アプリケーションシナリオのアダプタモード

1.することを可能にする内部インタフェースと互換性の内部インターフェイスに外部インターフェイス

2.報酬内部インタフェース設計上の欠陥。新しいインターフェースの前にアダプタを介して、より抽象的なインタフェースアダプタへの抽象インタフェース

設計不良のパッケージインタフェース

SDKには、外部インタフェースを導入しました。優れたインターフェースデザインを抽象化することにより、

パブリック クラス CD { // このクラスの外SDKから、私たちはそのコード変更する権利がありません
   // ... 
  公共の 静的な 無効 staticFunction1(){ // ...} 
  
  パブリック 無効 uglyNamingFunction2(){ // ...} 

  公共の 無効 tooManyParamsFunction3(int型 paramA、int型 paramB、...){ // ...} 
  
   パブリック 無効 lowPerformanceFunction4を(){ // ...} 
} 

// アダプタモード復興
パブリック クラスITarget {
   はfunction1();
   空隙機能2();
   無効fucntion3(ParamsWrapperDefinition paramsWrapper);
   無効機能4();
   // ... 
}
 // 注:アダプタクラス名はアダプターで終了する必要はありません
パブリック クラス CDAdaptor 拡張 CD 実装をITarget {
   // ... 
  公衆 ボイド関数1(){
      スーパー.staticFunction1(); 
  } 
  
  公共 ボイド機能2(){
     スーパー.uglyNamingFucntion2(); 
  } 
  
  公共 ボイド関数3(ParamsWrapperDefinition paramsWrapper){
      スーパー.tooManyParamsFunction3(paramsWrapper.getParamA()、...); 
  } 
  
  パブリック 無効機能4(){
     // ...それを再実装... 
  } 
}

インタフェースデザインの統一複数のクラス

私たちは、内部インタフェースアダプタを介して私たちは抽象的、フィルタリング機能キー、クラスに依存する外部システムは、複数の異なるクラスは、独自の実装を持ってい

パブリック クラス ASensitiveWordsFilter { // 濾過システムが敏感ワードインターフェース提供
   // 敏感単語が***置換のテキスト元のテキストは、テキスト出力関数
  パブリック文字filterSexyWords(文字列テキスト){
     // ... 
  } 
  
  パブリック文字列filterPoliticalWordsを(文字列テキスト){
     // ... 
  } 
} 

パブリック クラス BSensitiveWordsFilter { // B敏感ワードフィルタリングシステムインタフェース提供
  パブリック文字列フィルタ(文字列テキスト){
     // ... 
  } 
} 

パブリック クラスを CSensitiveWordsFilter { // C敏感ワード濾過システムは、インタフェースを提供
  公開フィルタ文字列(文字列のテキスト文字列マスク){
     // ... 
  } 
} 

// 未使用アダプタパターンコード:コードのテスト容易性、乏しいスケーラビリティ
パブリック クラスRiskManagement {
   プライベート ASensitiveWordsFilter AFILTER = 新しい新しいASensitiveWordsFilter()。
   プライベート BSensitiveWordsFilter bFilter = 新しい新しいBSensitiveWordsFilter();
   プライベート CSensitiveWordsFilter CFILTER = 新しい新しいCSensitiveWordsFilter(); 
  
  パブリック文字filterSensitiveWords(文字列テキスト){ 
    文字列maskedText = aFilter.filterSexyWords(テキスト); 
    maskedText =aFilter.filterPoliticalWords(maskedText); 
    maskedText = bFilter.filter(maskedText); 
    maskedText = cFilter.filter(maskedText、 "***" );
     戻りmaskedText; 
  } 
} 

// アダプタモード変換
パブリック インターフェース ISensitiveWordsFilter { // 統一インタフェース定義
  文字列フィルタ(文字列テキスト); 
} 

パブリック クラス ASensitiveWordsFilterAdaptor 実装ISensitiveWordsFilter {
   プライベートASensitiveWordsFilter AFILTER、
   パブリック文字列フィルタ(文字列テキスト){ 
    文字列maskedText =aFilter.filterSexyWords(テキスト); 
    maskedText = aFilter.filterPoliticalWords(maskedText);
     リターンmaskedText; 
  } 
} 
// ...省略BSensitiveWordsFilterAdaptor、CSensitiveWordsFilterAdaptor ... 

// スケーラビリティ、より多くの開閉の原則に沿って、あなたは新しいを追加した場合敏感なワードフィルタリングシステム、
 // この完全に変更せずに、クラス、インターフェイスに基づいてプログラミングのためではなく、コードのより良いテスト容易。
パブリック クラスRiskManagement { 
   プライベートリスト<ISensitiveWordsFilter>フィルタ= 新しい新規のArrayList <> (); 
 
  公共 ボイドaddSensitiveWordsFilter(ISensitiveWordsFilterフィルタ){ 
    filters.add(フィルタ); 
  } 
  
  公共ストリングfilterSensitiveWords(文字列テキスト){ 
    ストリングmaskedText = テキスト。
    (ISensitiveWordsFilterフィルタ:フィルタ){ 
      maskedText = filter.filter(maskedText)。
    } 
    戻りmaskedTextと、
  } 
}

 

おすすめ

転載: www.cnblogs.com/LQBlog/p/12572334.html
おすすめ