需求:不改变某个类,加一些方法。
适配器类,以这个类为基础添加需要的方法,也就是集成了这个类。
1.类适配器:
Student 类:会学习,运动,考试
public class Student {
protected String sname;
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public void study() {
System.out.println(sname + "在学习");
}
public void sport() {
System.out.println(sname + "在运动");
}
public void exam() {
System.out.println(sname + "在考试");
}
}
接口:定义Student 类中已有的函数,并且定义需要添加的函数
public interface Target {
void study();
void sport();
void exam();
void race();
void volunteer();
}
类适配器:
public class StudentAdapter extends Student implements Target{
@Override
public void race() {
System.out.println(sname + "race");
}
@Override
public void volunteer() {
System.out.println(sname + "volunteer");
}
}
测试:
public static void main(String[] args) {
StudentAdapter x = new StudentAdapter();
x.setSname("www");
x.study();
x.race();
}
结果:
www在学习
wwwrace
2.对象适配器
两插口类:
public class TwoHole {
void SpecificRequest() {
System.out.println("二孔插头,无法连接到3孔插座");
}
}
插座接口:
public interface ThreeHoleSocket {
void request();
}
适配器:
/**
* 对象适配器模式
* 由继承变成对象引用赋值,不能重载,可以多态。
* @author Administrator
*
*/
public class PowerAdapter implements ThreeHoleSocket{
TwoHole t;
public PowerAdapter(TwoHole t) {
this.t = t;
}
@Override
public void request() {
t.SpecificRequest();
System.out.println("使用了转换插口,连接到3孔插座上");
}
}
测试:
public static void main(String[] args) {
TwoHole y = new TwoHole();
PowerAdapter x = new PowerAdapter(y);
x.request();
}
结果:
二孔插头,无法连接到3孔插座
使用了转换插口,连接到3孔插座上