对于刚从工厂生产出来的商品,有些功能并不能完全满足用户的需要。因此,用户通常会对其进行一定的改装工作。编写程序为普通的汽车增加GPS定位功能,借此演示适配器模式的用法。
思路分析:
- 这个问题的需求是,在主方法中分别设定普通汽车和GPS汽车的车名和速度,并分别输出普通汽车和GPS汽车的信息;
- 首先需要定义一个父类代表普通汽车,它包括两个成员变量分别表示车名和速度,四个成员方法分别设置及获取车名和速度,并重写toString()方法使得该父类返回一个字符串类型的引用;
- 定义一个接口,在该接口中定义提供定位功能的方法;
- 定义一个子类,该子类继承父类并实现接口,包括一个成员方法,该方法利用汽车的速度来确定汽车的位置,并重写toString()方法使得该子类返回一个字符串类型的引用。
代码如下:
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() { //重写toString()方法 StringBuilder sb = new StringBuilder(); sb.append("车名:" + name + ", "); sb.append("速度:" + speed + "千米/小时"); return sb.toString(); } } import java.awt.Point; public interface GPS { Point getLocation(); //提供定位功能 } import java.awt.Point; public class GPSCar extends Car implements GPS { @Override public Point getLocation() { //利用汽车的速度来确定汽车的位置 Point point = new Point(); point.setLocation(super.getSpeed(), super.getSpeed()); return point; } @Override public String toString() { //重写toString()方法 StringBuilder sb = new StringBuilder(); sb.append(super.toString()); sb.append(", 坐标:(" + getLocation().x + ", " + getLocation().y + ")"); return sb.toString(); } } public class Test { public static void main(String[] args) { System.out.println("自定义普通的汽车:"); Car car = new Car(); car.setName("Adui"); car.setSpeed(60); System.out.println(car); System.out.println("自定义GPS汽车:"); GPSCar gpsCar = new GPSCar(); gpsCar.setName("Audi"); gpsCar.setSpeed(60); System.out.println(gpsCar); } }
效果如图: