java笔记--适配器模式的运用

适配器模式的运用

--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884785.html "谢谢--

主要应用:
可以在符合OCP原则(开笔原则)的基础上,为类增加新的功能。
在现有功能上添加新的功能时无须修改原有功能代码。

主要角色:
目标角色:就是期待得到的接口,如给汽车添加GPS的接口;
源角色:需要被增加功能的类或接口,如汽车类
适配器角色:新创建的类,在源角色的基础上实现了目标角色,如已经成功添加了GPS的汽车类

例子:
为汽车添加GPS功能
1.建立目标角色——添加GPS的接口
/**
* 定义GPS接口
*
* @author XIEHEJUN
*
*/
public interface GPS {
  public Point getLocation();
}

2.建立源角色——汽车类

/**
* 汽车实体类
*
* @author XIEHEJUN
*
*/
public class Car {
  private String name;
  private double speed;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public double getSpeed() {
    return speed;
  }

  public void setSpeed(double speed) {
    this.speed = speed;
  }

  @Override
  public String toString() {
    StringBuilder sbd =new StringBuilder();
    sbd.append("车主名称为:"+name+" ");
    sbd.append("车速为:"+speed+" ");
    return sbd.toString();
  }

}

3.适配器角色——为汽车添加GPS的类

/**
* 为汽车添加GPS
*
* @author XIEHEJUN
*
*/
public class CarAddGPS extends Car implements GPS {

  @Override
  public Point getLocation() {
    Point point = new Point();
    point.setLocation(super.getSpeed(), super.getSpeed());
    return point;
  }

  @Override
  public String toString() {
    StringBuilder sbd = new StringBuilder();
    sbd.append(super.toString());
    sbd.append(",坐标为(" + getLocation().x + "," + getLocation().y + ")");
    return sbd.toString();
  }
}
4.测试适配器类——main函数

public static void main(String[] args) {
  System.out.println("************创建普通汽车类**********");
  Car car = new Car();
  car.setName("李宏");
  car.setSpeed(60);
  System.out.println(car);
  System.out.println("************创建带有GPS的汽车类*******");
  CarAddGPS carGps = new CarAddGPS();
  carGps.setName("李小华");
  carGps.setSpeed(60);
  System.out.println(carGps);
}

posted @ 2014-08-01 13:24  Liape  阅读(421)  评论(0编辑  收藏  举报