实例解析Java设计模式编程中的适配器模式使用_Java教程-查字典教程网
实例解析Java设计模式编程中的适配器模式使用
实例解析Java设计模式编程中的适配器模式使用
发布时间:2016-12-28 来源:查字典编辑
摘要:平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个...

平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的。这个时候Adapter模式就会派上用场了。

Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种。Adapter模式是构造型模式之一,通过Adapter模式,可以改变已有类(或外部类)的接口形式。

适配器 模式 有三种方式,一种是对象适配器,一种是类适配器, 一种是接口适配器

以下举例说明:

1.类适配器

类图

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"); } }

2.对象适配器

类图:

/** * 对象适配器: 使用对象组合的方式,是动态组合的方式。 * 既能画方又能画圆 * @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); } }

3.接口适配器

类图

/* * 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现, * 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法 */ 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

适配器模式的三个特点:

1 适配器对象实现原有接口

2 适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个接口,只是一个单纯的对象)

3 对适配器原有接口方法的调用被委托给新接口的实例的特定方法

有人认为讲解设计模式的例子都太简单,看着感觉是那么回事,但是要是真想在项目开发中使用,还真是应用不到。其实我们不必在项目中刻意使用设计模式,而是应该从实际的设计问题出发,看哪个模式能解决我们的问题,就使用哪个模式。不要为了使用模式而使用模式,那样就舍本逐末了,一般情况下,只要遵循一定的设计原则就可以了,设计模式也是根据这些原则被总结出来的,熟悉了这些原则,模式自然而然就有了。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Java学习
    热门Java学习
    编程开发子分类