设计模式之适配器模式(Adapter)

概述
将一个类的接口转换成用户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

两种实现方式
1.类的适配器模式:
2.对象的适配器模式:

类的适配器模式的UML图,如下:
这里写图片描述

类的适配器模式把适配的类的API转换成为目标类的API。
上图设计的角色有:
目标角色(Target):这就是所期待得到的接口。
源角色(Adapee):现在需要适配的接口。
适配器角色(Adapter):是本模式的核心,适配器把源接口转换成目标接口。
代码示例:

interface Target{
    void method1();
    void method2(); //期待得到该方法
}
//源类中不具备method2中的方法。
class Adaptee{
    public void method1(){
        System.out.println("method1");
    }
}

class Adapter extends Adaptee implements Target{

    @Override
    public void method2() {
        System.out.println("this is target method");
    }

}

public class MainTest {

    public static void main(String arg[]) {
        Target target = new Adapter();
        target.method2();
    }
}

对象的适配器模式的UMl图,如下:
这里写图片描述

核心思路与类的适配器模式相同,只是将Adapter类修改,不继承Adaptee类,而是持有Adaptee类的引用。代码如下:

interface Target{
    void method1();
    void method2();
}

class Adaptee{
    public void method1(){
        System.out.println("method1");
    }
}

class Adapter implements Target{

    private Adaptee adaptee;

    public Adapter(Adaptee adaptee){
        this.adaptee = adaptee;
    }

    @Override
    public void method2() {
        System.out.println("this is target method");
    }

    @Override
    public void method1() {
        // TODO Auto-generated method stub
        adaptee.method1();
    }

}

public class MainTest {

    public static void main(String arg[]) {
        Target target = new Adapter(new Adaptee());
        target.method2();
    }
}

适配器模式的优缺点:
更好的复用性,更好的扩展性。系统需要使用现有的类,而此类的接口不符合系统的需要,那么通过适配器模式就可以让这些功能得到更好的复用。在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
缺点:过多的使用适配器,会让系统非常凌乱,不易整体把握。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值