説明
このモデルは、適応のために使用され、それが一緒に作業するために協力することとしないので、非互換インタフェースの元のクラスを可能にする互換インタフェース互換インタフェースに変換されません
アプリケーションのソースコード
「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と、 } }