2 つの既製のクラスがあり、それらの間に接続がないのに、一方のクラスのメソッドともう一方のクラスのメソッドを使用したいという状況がよくあります。解決策の 1 つは、それぞれのインターフェイスを変更することですが、これは私たちが最も望んでいないことです。このとき、アダプターモードが便利です
アダプターモードには、オブジェクトアダプター、クラスアダプター、インターフェースアダプターの3つのメソッドがあります
以下は例です:
クラス アダプター クラス図
public class DrawRectangle {//画方 public void drawRectangle(String msg) { System.out.println("draw Rectangle: " + msg); } }
public interface IDrawCircle {//画圆的接口 void drawCircle(); }
/** * 类适配器 使用对象继承的方式,是静态的定义方式 * @author stone * */ public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {//既能画方又能画圆 @Override public void drawCircle() { System.out.println("DrawAdapter4Class: drawCircle"); } }
オブジェクト アダプター クラス図:
/** * 对象适配器: 使用对象组合的方式,是动态组合的方式。 * 既能画方又能画圆 * @author stone * DrawAdapter是适配器,DrawRectangle属于adapter,是被适配者,适配器将被适配者和适配目标(DrawCircle)进行适配 * */ public class DrawAdapter4Object implements IDrawCircle {//既能画方又能画圆 private 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); } }
インターフェイス アダプター
クラス図
/* * 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现, * 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法 */ public interface IDraw { void drawCircle(); void drawRectangle(); }
/* * 接口适配器 的默认实现 */ public class DefaultDrawAdapter implements IDraw {//画方 画圆 皆为空实现 @Override public void drawCircle() { } @Override public void drawRectangle() { } }
印刷
public class Test { public static void main(String[] args) { //对象适配器 DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle()); objAdapter.drawCircle(); objAdapter.drawRectangle(" in DrawAdapter4Object"); System.out.println("--------------"); //类适配器 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"); } } }
以上がJavaアダプタパターンの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。