私たちはしばしばこの状況に遭遇します。既製の2つのクラスでは、それらの間に接続はありませんが、クラスの1つともう1つのメソッドを使用したいと考えています。それぞれのインターフェイスを変更するための回避策がありますが、これは私たちが見たくないものです。現時点では、アダプターモードが役立ちます。
アダプターモードは、GOFが提案する23の設計モードの1つであるアダプターモードとも呼ばれます。アダプターモードは、建設的なモードの1つです。アダプターモードを介して、既存のクラス(または外部クラス)のインターフェイス形式を変更できます。
アダプターモードには3つの方法があります。1つはオブジェクトアダプター、1つはクラスアダプター、もう1つはインターフェイスアダプターです
次の例を示します。
1。クラスアダプター
クラス図
public class drawrectangle {// draw square public void drawrectangle(string msg){system.out.println( "draw rectangle:" + msg); }} public interface idrawcircle {// draw circle interface void drawCircle(); } / ** *クラスアダプターはオブジェクト継承を使用します。これは静的定義方法です * @author stone * */ public class drawadapter4class extends drawrectangle explentice idrawcirecle {// @override @override public void drawcircle(){system.out.out.println(drawadapter4class:drawcurcle "); }}2。オブジェクトアダプター
クラス図:
/***オブジェクトアダプター:オブジェクトの組み合わせを使用する方法は、動的に結合する方法です。 *正方形と円を描くことができます * @Author Stone * DrawAdapterはアダプターで、DrawRectangleはアダプターに属し、アダプターです。アダプターはアダプターに適応し、アダプター(drawcircle) * */ public class drawadapter4object idrawcircle {//は正方形を描画し、円形のdrawrectangle drawrectangleを描くことができます。 public DrawAdapter4Object(DrawRectangle DrawRectangle){this.drawrectangle = drawRectangle; } @Override public void drawCircle(){system.out.println( "drawadapter4object:drawcircle"); } public void drawrectangle(string msg){drawrectangle.drawrectangle(msg); }} 3。インターフェイスアダプター
クラス図
/ * *インターフェイスアダプター:インターフェイスには抽象的なメソッドがあります。私たちはそれらのいくつかを実装したいだけですが、それらすべてを実装したくありません。 *デフォルトの空の実装を提供し、そこから継承し、実装する方法を書き換えます */ public interface idraw {void drawcircle(); void drawrectangle(); } /**インターフェイスアダプターのデフォルト実装*/public class defaultdrawadapterはidraw {//正方形と円の実装@override public void drawcircle(){} @override public void drawrectangle(){}}}} public class test {public static void main(string [] args){// object adapter drawadapter4object objadapter = new DrawAdapter4Object(new DrawRectangle()); objadapter.drawcircle(); objadapter.drawrectangle( "in DrawAdapter4Object"); System.out.println( "-----------------"); // class adapter drawadapter4class clzadapter = new DrawAdapter4Class(); clzadapter.drawcircle(); clzadapter.drawrectangle( "In DrawAdapter4Class"); System.out.println( "---------------------"); //インターフェイスアダプターmydrawadapter mydrawadapter = new mydrawadapter(); mydrawadapter.drawcircle(); mydrawadapter.drawrectangle(); } static class mydrawadapter extends defaultdrawadapter {@override public void drawcircle(){system.out.println( "drawcircle in mydrawadapter"); }}}印刷
DrawAdapter4Object:DrawCircle DrawRectangle:in DrawAdapter4Object ------------- DrawAdapter4Class:DrawCircle Draw Rectangle:In DrawAdapter4Class ------------- DrawCircle in MyDrawadapter
アダプターモードの3つの機能:
1アダプターオブジェクトは、元のインターフェイスを実装します
2アダプターオブジェクトは、新しいインターフェイスを実装するオブジェクトを組み合わせます(このオブジェクトはインターフェイスを実装できません。これは単純なオブジェクトです)
3.アダプターの元のインターフェイスメソッドへの呼び出しが新しいインターフェイスのインスタンスに委任される特定の方法
一部の人々は、デザインパターンを説明する例はあまりにも単純であると考えていますが、それはそのように思えますが、プロジェクト開発でそれを本当に使用したい場合、それを適用することはできません。実際、プロジェクトで設計パターンを意図的に使用する必要はありませんが、実際の設計上の問題から始めて、どのモデルが問題を解決できるかを使用する必要があります。パターンを使用するためにパターンを使用しないでください。次に、最終結果をスキップしてください。一般的に言えば、特定の設計原則に従う限り、デザインパターンもこれらの原則に基づいて要約されています。これらの原則に精通している場合、パターンは当然存在します。