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

涉及到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]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值