この記事の出所:GitHubにはこちらをクリック・ || GitEE・こちらをクリック
I.はじめにアダプタモード
1、基本的な考え方
2つのクラスが不一致が一緒に働くことができないインターフェイスで一緒に仕事をしていたように、別のを期待するクライアント・インタフェースへのクラスのアダプタモードインターフェース。そこアダプタモードアダプタモードとクラスのオブジェクトアダプタモード、3つの異なる形でデフォルト(インターフェイス)アダプタ。
2、生活のシーン
ベースアダプタモード、220Vの電圧、110Vを必要な電圧に変換されます。
public class C01_InScene {
public static void main(String[] args) {
CurrentAdapter adapter = new CurrentAdapter() ;
System.out.println(adapter.get110VCurrent()) ;
}
}
// 220V电流
class Current220V {
public int get220VCurrent (){
return 220 ;
}
}
// 110V电流接口
interface Current110V {
int get110VCurrent () ;
}
// 电流适配器
class CurrentAdapter extends Current220V implements Current110V {
// 电流转换方法
@Override
public int get110VCurrent() {
int high = get220VCurrent() ;
int low = high/2 ;
return low ;
}
}
第二に、アダプタクラス
1、モデルの説明
アダプタモードは、APIのAPIに変換対象クラスのクラスのクラスに適応しました。
2、中核的な役割
- ターゲット(目標)役割
これは、外観を取得するためのインタフェースです。
- ソース(Adapee)役割:
今、私たちは、インターフェースを適応させる必要があります。
- アダプタ(Adaper)役割
このクラスのアダプタは、コアモードです。ソースインタフェースアダプタは、宛先インターフェイスに変換します。
図3に示すように、ソースコードの実装
interface Target {
void sampleOperation1();
void sampleOperation2();
}
class Adaptee {
public void sampleOperation1(){
System.out.println("Adaptee.sampleOperation1()");
}
}
class Adapter extends Adaptee implements Target{
@Override
public void sampleOperation2() {
System.out.println("Adapter.sampleOperation2()");
}
}
第三に、オブジェクトアダプタ
1、モデルの説明
ターゲットクラスAPIになるように適合され、アダプタパターンクラスが異なるクラスの変換にアダプタモード等、アダプタAPIスキーマ・オブジェクトと同様に、アダプタパターンオブジェクトはAdapteeクラスに接続されていない継承を使用するが、委任接続クラスにAdaptee関係。
図2に示すように、ソースコードの実装
interface Target1 {
void sampleOperation1();
void sampleOperation2();
}
class Adaptee1 {
public void sampleOperation1(){
System.out.println("Adaptee.sampleOperation1()");
}
}
class Adapter1 implements Target1 {
private Adaptee1 adaptee ;
public Adapter1 (Adaptee1 adaptee){
this.adaptee = adaptee;
}
public void sampleOperation1() {
this.adaptee.sampleOperation1();
}
@Override
public void sampleOperation2() {
System.out.println("Adapter.sampleOperation2()");
}
}
第四に、インタフェースアダプタ
1、モデルの説明
デフォルト(インターフェース)アダプタ(デフォルトアダプタ)モードインターフェイスのデフォルト実装を提供し、このサブタイプは、元のインターフェースから延在することなく、このデフォルトから延びるように実装されてもよいです。
図2に示すように、ソースコードを達成するために
public class C04_AdapterInte {
public static void main(String[] args) {
ServiceAdapter adapter = new ServiceAdapter(){
@Override
public int serviceOperation2() {
return 22 ;
}
};
System.out.println(adapter.serviceOperation2());
}
}
interface AbstractService {
void serviceOperation1();
int serviceOperation2();
String serviceOperation3();
}
class ServiceAdapter implements AbstractService{
@Override
public void serviceOperation1() {
}
@Override
public int serviceOperation2() {
return 0;
}
@Override
public String serviceOperation3() {
return null;
}
}
五、春Frameworkアプリケーション
1、アプリケーションのシーン記述
ときに実行制御SpringMvc実行要求を、そのようなプロセス
1)プロセッサ、コントローラアダプタに先行するのDispatcherServletハンドラ(すなわち、コントローラ)を呼び出して実行する;
2)アダプタプロセッサハンドラを実行する、のModelAndViewアダプタに返さ;
3)フロントエンドプロセッサ・アダプタへのModelAndView制御を返します。
2、プロセス分析
- コアインターフェースと実装
コントローラとHandlerAdapter 2つのコア・インタフェース。
- ハンドラアダプタ
それぞれの方法が実行される代わりに、アダプタハンドラ(制御層コントローラ)から、対応するアダプタの実装クラスにハンドラを引き起こすアダプタインタフェース、。
public interface HandlerAdapter {
// 判断类型是否匹配
boolean supports(Object var1);
// 执行方法,返回ModelAndView
ModelAndView handle(HttpServletRequest var1,
HttpServletResponse var2, Object var3)
throws Exception;
}
プロセッサを通過する支持体()メソッドは、実装クラスが返された場合、アダプタは、アダプタのサポートのサポートをサポートするか否かを判定する。
- DispatchServlert
いくつかの段階で具体ソース抽出プロセス。
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
HandlerExecutionChain mappedHandler = null;
mappedHandler = this.getHandler(processedRequest);
HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
mappedHandler.applyPostHandle(processedRequest, response, mv);
}
- SimpleControllerHandlerAdapter
最後に、特定の実装を見て、2つの方法がハンドルをサポートしています。
public class SimpleControllerHandlerAdapter implements HandlerAdapter {
public SimpleControllerHandlerAdapter() {
}
public boolean supports(Object handler) {
return handler instanceof Controller;
}
public ModelAndView handle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
return ((Controller)handler).handleRequest(request, response);
}
}
第六に、長所と短所アダプタ
1、効果分析
より良い再利用性、システムは、既存のクラスを使用する必要があり、そのようなインタフェースは、システムのニーズを満たしていません。そして、アダプタモードを通じて、より良い再利用を得るために、これらの機能を有効にします。スケーラビリティ。
2、短所の分析
全体を制御するシステムは非常に厄介かつ困難にするために過度に使用するアダプター。
七、送信元アドレス
GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent