Wir stoßen oft auf diese Situation. Wir haben zwei vorgefertigte Klassen und es besteht keine Verbindung zwischen ihnen, aber jetzt möchten wir die Methoden einer Klasse und die Methoden der anderen Klasse verwenden. Eine Lösung besteht darin, ihre jeweiligen Schnittstellen zu ändern, aber das ist das Letzte, was wir sehen wollen. Zu diesem Zeitpunkt wird sich der Adaptermodus als nützlich erweisen
Es gibt drei Möglichkeiten, den Adaptermodus anzupassen: eine ist der Objektadapter, die andere ist der Klassenadapter und die andere ist der Schnittstellenadapter
Die folgenden Beispiele veranschaulichen:
Klassenadapter-Klassendiagramm
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"); } }
Objektadapter-Klassendiagramm:
/** * 对象适配器: 使用对象组合的方式,是动态组合的方式。 * 既能画方又能画圆 * @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); } }
Schnittstellenadapter
Klassendiagramm
/* * 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现, * 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法 */ 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"); } } }
DrawAdapter4Object: drawcircle draw Rectangle: in DrawAdapter4Object -------------- DrawAdapter4Class: drawCircle draw Rectangle: in DrawAdapter4Class -------------- drawCircle in MyDrawAdapter
Das obige ist der detaillierte Inhalt vonSo implementieren Sie das Java-Adaptermuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!