适配器模式的运用
--如果朋友您想转载本文章请注明转载地址" "谢谢--
主要应用:
可以在符合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); }