适配器模式(包装器模式)

1.定义

将一个接口转换成客户希望的另一个接口

2.分类

适配器模式主要有两种,类适配器和对象适配器;

3.类适配器

客户需要可以直接调用Target接口,但是客户目标是Adaptee接口,此时可以定义Adapter类继承adaptee的实现类,同时实现Target接口,示例代码如下

//Target:  客户需要直接调用的接口
//Adaptee: 已经存在的接口,包含最终需要调用的方法,需要进行适配
//Adapter: 适配器类,让客户通过Target接口可以调用adaptee中的方法

public class ClassAdapterPattern {
    public static void main(String[] args){
        Adapter adapter=new Adapter();
        adapter.eat();
    }
}
interface Target{
    void eat();
}
interface Adaptee{
    void drink();
}
class AdapteeImpl implements Adaptee{
    public void drink(){
        System.out.println("drink something");
    }
}
class Adapter extends AdapteeImpl implements Target{
    public void eat(){
        drink();
    }
}

4.对象适配器

客户需要可以直接调用Target接口,但是客户目标是Adaptee接口,此时可以定义Adapter实现Target接口,同时其中定义Adaptee对象来实现客户真正需要的功能,示例代码如下

//Target:  客户需要直接调用的接口
//Adaptee: 已经存在的接口,包含最终需要调用的方法,需要进行适配
//Adapter: 适配器类,让客户通过Target接口可以调用adaptee中的方法

public class ObjectAdapterPattern {
    public static void main(String[] args){
        Adaptee2 adaptee2=new Adaptee2Impl();
        Adapter2 adapter2=new Adapter2(adaptee2);
        adapter2.eat();
    }
}
interface Target2{
    void eat();
}
interface Adaptee2{
    void drink();
}
class Adaptee2Impl implements Adaptee2{
    public void drink(){
        System.out.println("drink something!");
    }
}
class Adapter2 implements Target{
    private Adaptee2 adaptee2;
    public Adapter2(Adaptee2 adaptee2){
        this.adaptee2=adaptee2;
    }
    public void eat(){
        adaptee2.drink();
    }
}

5.优点与缺点

1)使得Target类更易于扩展,如果需要扩展其他功能可以定义其他Adapter类;

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值