/**
* 被适配的类:相当于本例子中的具有PS/2的键盘。可以满足客户的需求,但是计算机无法使用这个接口
* 时间:2015年4月3日20:35:25
* 也就是说,我们在这个类中定义的方法已经可以充分的完成客户所需要的目标, 因此也就没有必要重新再写一遍了。
* 因此我们需要通过某种途径,来使用这个方法
*/
package com.bjsxt.cn.adapter;
public class Adaptee {
public void request() {
System.out.println("我作为PL/2键盘,也能打字,能够满足客户的需求。");
}
}
/**
* 目标接口Target相当于例子中的USB接口
* 时间:2015年4月3日20:34:21
* 接口,用于被实现。
*/
package com.bjsxt.cn.adapter;
public interface Target {
public void handleReq();
}
/**
* 相当于本例子中的适配器(转换器),把不被计算机识别的PS/2接口转换成可以识别的USB口
* 我们可以让它直接继承需要适配的类,这样它自身就成为了键盘,也实现了Target中的方法,成为了USB类的东西
* 这种方法叫做类适配器
*/
package com.bjsxt.cn.adapter;
public class Adapter extends Adaptee implements Target{
@Override
public void handleReq() {
super.request();
}
}
/**
* 相当于转换器。适配器。
* 时间:2015年4月3日20:44:20
* 我们所想要实现的功能是想要通过该类的对象,达到调用了被适配器对象中的方法来满足客户的要求。
* 也就是说,我作为一个个体,需要访问的是另外一个个体的东西。当然,我们可以直接结成这个另外的个体,
* 这样在我们内部也就存在了一份另外个体的东西。当然也可以有另外一种实现方式。那就是
* 让我内部有一个另外个体的引用(成员变量),通过这个引用,我们得以访问另外个体的东西。
* 这就是组合,相应的,这种适配器实现的方式叫做对象适配器。
*/
package com.bjsxt.cn.adapter;
public class Adapter2 implements Target {
private Adaptee adaptee;
public Adapter2(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handleReq() {
adaptee.request();
}
}
/**
* 相当于本例子中的计算机,只有USB接口。也就是说可以使用Target类型的东西。但是无法直接使用PS/2的键盘,
* 尽管键盘的功能已经非常完备
* 时间:2015年4月3日20:37:27
*
*/
package com.bjsxt.cn.adapter;
public class Client {
public void test(Target t) {
t.handleReq();
}
public static void main(String[] args) {
Client client = new Client();
Adaptee a = new Adaptee();
Target target = new Adapter();
client.test(target);
}
}
/*
* 我作为PL/2键盘,也能打字,能够满足客户的需求。
*
* */
/*
* 相当于本例中的计算机,只不过这个程序的适配器是通过组合模式的对象适配器实现的。
*
* */
package com.bjsxt.cn.adapter;
public class Client2 {
public void test(Target t) {
t.handleReq();
}
public static void main(String[] args) {
Client2 client2 = new Client2();
Adaptee a = new Adaptee();
Adapter2 a2 = new Adapter2(a);
client2.test(a2);
}
}
/*
* 我作为PL/2键盘,也能打字,能够满足客户的需求。
* */