白菜之简单适配器模式例子
2016-07-21 17:29
399 查看
涉及到3个文件:
Car类:目标文件或者叫源文件,这个文件需要增加额外功能,但是自己不方便增加;
Gps接口:这个文件是Car文件缺少的方法/功能,这里单独列出,为了就是给适配器来添加;
GpsCar类:这个就是适配器类,这个类是在Car和Gps的基础上组成的一个新的功能类,他可以完成调用任务
User类:就是调用者,正式他才需要适配器
本例子还存在很多问题,太晚了就不修改了,总结如下:
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]
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]
相关文章推荐
- fastjson处理接口时的一个问题
- C#中实现Fluent Interface的三种方法
- c#中的interface abstract与virtual介绍
- 领悟php接口中interface存在的意义
- C#接口interface用法实例
- PHP abstract与interface之间的区别
- C#接口(Interface)用法分析
- PHP SPL标准库之接口(Interface)详解
- go语言中的interface使用实例
- Go语言interface详解
- LINUX6不能启动,bringing up interface eth0:
- 使用 golang 收集系统指标
- VMWare: eth0: error fetching interface information : device not found
- meta
- 配置IEEE802.3X流控制
- Cisco路由器交换机配置命令大全
- ObjC: 使用KVC
- cisco交换机 配置一组端口,interface range
- CentOS下设置网卡的工作模式的例子
- IOS控件 Tableview 下拉刷新,加载数据