GOF23设计模式之适配器模式的实现


/**
 * 被适配的类:相当于本例子中的具有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键盘,也能打字,能够满足客户的需求。
 * */

 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值