适配器模式的运用
--如果朋友您想转载本文章请注明转载地址"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);
}