Adapter


三要素:

1,客户提供接口

2,现有的类

3,适配器


举例说明:

1,客户提供的接口

public interface ICalculate {

public int getResult(int x , int y);

}


2, 现有类

public class AddCalculate {

public int add(int x, int y){
return x+y;
}

}


3适配器的设计模式实现可分为两类:

(1), 类适配器:继承现有的类,并且实现客户提供的接口

public class Adapter extends AddCalculate implements ICalculate{
public int getResult(int x, int y) {
  return add(x, y);
}
}

(2),对象适配器:

public class Adapter implements ICalculate{

private AddCalculate add ;

public Adapter(AddCalculate add){
this.add = add;
}

public int getResult(int x, int y) {
return add.add(x, y);
}

}


4,测试

public class Main {

public static void main(String args[]){
//class way
ICalculate calculate = new classWay.Adapter();
System.out.println(calculate.getResult(10, 20));

//object way
ICalculate calculate2 = new objectWay.Adapter(new AddCalculate());
System.out.println(calculate2.getResult(10, 20));
}

}

5、类模式/对象模式分析:
由于存在两种Adapter实现方式,那么在实际中我们采用哪一种要好呢?通过分析发现这两种模式有两个主要特性区别,并且还是互补的:
 
A、表现在Adapter对Adaptee的特殊性要求:
类模式由于Adapter是Adaptee的子类,所以Adapter很方便重新定义Adaptee中的个别方法,以达到自己的特性需要。
对象模式由于Adapter不是Adaptee的子类,所以如果Adapter对Adaptee中的个别方法有特殊的需要,就要新建Adaptee的子类,而让Adapter使用这个子类。
 
B、表现在Adaptee的类层次扩展上:
类模式由于Adapter是Adaptee的子类,所以编译后就不能再更换所实现的父类Adaptee,因此如果有一个Adaptee的类层次结构,就要相应的有一个Adapter的类层次结构,且新扩展Adaptee时很不方便。
对象模式由于Adapter不是Adaptee的子类,而是通过使用的方式,所以在系统运行时仍然可以更换Adapter所使用的Adaptee,只要他们具有相同的类型。所以在新扩展Adaptee时很方便。




转载于:https://my.oschina.net/yjwxh/blog/206356

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值