Nous rencontrons souvent cette situation. Nous avons deux classes toutes faites et il n'y a aucun lien entre elles, mais maintenant nous voulons utiliser les méthodes d'une classe et les méthodes de l'autre classe. Une solution consiste à modifier leurs interfaces respectives, mais c'est la dernière chose que nous souhaitons voir. À ce stade, le mode Adaptateur sera utile
Il existe trois façons d'adapter le mode adaptateur, l'une est l'adaptateur d'objet, l'autre est l'adaptateur de classe et l'autre est l'adaptateur d'interface
Les exemples suivants illustrent :
Diagramme de classes de l'adaptateur de classe
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"); } }
Diagramme de classes de l'adaptateur d'objet :
/** * 对象适配器: 使用对象组合的方式,是动态组合的方式。 * 既能画方又能画圆 * @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); } }
Adaptateur d'interface
Diagramme de classes
/* * 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现, * 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法 */ 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"); } } }
Imprimer
DrawAdapter4Object: drawcircle draw Rectangle: in DrawAdapter4Object -------------- DrawAdapter4Class: drawCircle draw Rectangle: in DrawAdapter4Class -------------- drawCircle in MyDrawAdapter
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!