您的位置:首页 > 其它

白菜之简单适配器模式例子

2016-07-21 17:29 399 查看
涉及到3个文件:

Car类:目标文件或者叫源文件,这个文件需要增加额外功能,但是自己不方便增加;

Gps接口:这个文件是Car文件缺少的方法/功能,这里单独列出,为了就是给适配器来添加;

GpsCar类:这个就是适配器类,这个类是在Car和Gps的基础上组成的一个新的功能类,他可以完成调用任务

User类:就是调用者,正式他才需要适配器

package com.example.thirteen;

/**
* @author Administrator 汽车基本类,这个类用来生产整车 定义普通汽车,如车名,车速度,车轮子,车颜色 并Override
*         方法toString()
*/
public class Car {
private String name;
private int speed;
private int wheel;
private String color;

public Car() {
}

public Car(String name, int speed, int wheel, String color) {
this.color = color;
this.name = name;
this.speed = speed;
this.wheel = wheel;
}

public String getName() {
return name;
}

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

public int getSpeed() {
return speed;
}

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

public int getWheel() {
return wheel;
}

public void setWheel(int wheel) {
this.wheel = wheel;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

@Override
public String toString() {
StringBuilder aa = new StringBuilder();
aa.append("车的名字是" + name + ",");
aa.append("这个车子颜色是" + color + ",");
aa.append("车子有" + wheel + "个轮子,");
aa.append("车里能跑" + speed + "公里/小时");
return aa.toString();
}
}


 

package com.example.thirteen;

import java.awt.Point;

public interface Gps {
public Point gps();

}


 

package com.example.thirteen;

import java.awt.Point;

public class GpsCar extends Car implements Gps {
public Point gps() {
Point x = new Point();
x.setLocation(getSpeed(), getSpeed());
return x;
}

@Override
public String toString() {
StringBuilder aa = new StringBuilder();
aa.append("车的名字是" + getName() + ",");
aa.append("这个车子颜色是" + getColor() + ",");
aa.append("车子有" + getWheel() + "个轮子,");
aa.append("车里能跑" + getSpeed() + "公里/小时");
aa.append("车里坐标[" + gps().x + "," + gps().y + "]公里/小时");
return aa.toString();
}
}


 

package com.example.thirteen;

public class User {
public static void main(String[] args) {
Car carNormal = new Car("跑马", 200, 4, "红色");
System.out.println(carNormal);
System.out.println("下面开始改装汽车了,加装GPS了!");
GpsCar carGps = new GpsCar();
carGps.setColor("绿色");
carGps.setName("奥迪");
carGps.setSpeed(250);
carGps.setWheel(5);
System.out.println(carGps);

}
}

本例子还存在很多问题,太晚了就不修改了,总结如下:

1、如果父类定义了有参数的构造函数,那么子类在创建的时候就先去找他父类,必须先父类实例化,但是父类有只有有参数的构造函数,,此时就出现错误!提示如下:

Implicit super constructor xx() is undefined for default constructor,此时处理办法有如下:A:在父类中添加空参数的构造函数,本例子就是这样的,B:去掉有参数的构造函数,本例子其实可以在User文件中用set方法来一个一个设置,不用构造函数了。

2、我在刚开始的时候以为既然User第一次已经new了一个car对象了,那么在适配器里面就可以通过get方法取得相同的变量值,但是错了,我运行全是null,只有重新赋值到适配器中才可以。

3、这个例子的名字叫适配器模式,不知道和前面的工厂模式是不是一样,感觉还是一种思想,了解到思想感觉比实际的方法运用更重要。

4、对了,这里还用了一个定位的类Point,运用如下:Point point  = new Point();       point.setLocation(xx,xx),----->[poing.x,point.y]

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Point interface