适配器模式(Adapter)-----基于JAVA语言

适配器模式(Adapter)

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。


类的适配器模式:

   核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,通过Adapter类,将Source的功能扩展到Targetable里
例子:
    public class Source {  
        public void method1() {  
            System.out.println("this is original method!");  
        }  
    }
    public interface Targetable {  

        /* 与原类中的方法相同 */  
        public void method1();  

        /* 新的方法 */  
        public void method2();  
    }  

    //类Source和接口Targetable因为不兼容,导致不能在一起工作
    //适配器Adapter则可以在不改变源代码的基础上解决这个问题
    //这样Targetable接口的实现类Adapter的对象即使Targetable类型,也能访问到Source中的方法
    public class Adapter extends Source implements Targetable {  
        public void method2() {  
            System.out.println("this is the targetable method!");  
        }  
    }

    //测试类  这样Targetable接口的实现类就具有了Source类的功能。
    public class AdapterTest {  
        public static void main(String[] args) {  
            Targetable target = new Adapter();  
            target.method1();  
            target.method2();  
        }  
    }  

对象的适配器模式:

基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题
    例子:

public class Source {
    public void method1() {
        System.out.println("this is Source method!");
    }
}

public interface Targetable {
    public void method1();

    public void method2();

}

public class Adapter implements Targetable{
    private Source source;
    public Adapter(Source source) {
        this.source = source;
    }
    @Override
    public void method1() {
        source.method1();
    }
    @Override
    public void method2() {
        System.out.println("this is the targetable method!");  
    }
    
}

public class Test {
    public static void main(String[] args) {
        Source source = new Source();
        Targetable target = new Adapter(source);
        target.method1();
        target.method2();
    }
}


接口的适配器模式
    接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。
    public interface Sourceable {
    public void method1();
    public void method2();
}

public abstract  class Adapter implements Sourceable {
    public void method1() {}
    public void method2() {}
}

public class Test {
    public static void main(String[] args) {
        Sourceable source = new Sourceable() {
            
            @Override
            public void method2() {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void method1() {
                // TODO Auto-generated method stub
                
            }
        };
        Sourceable source2 = new Adapter() {
            @Override
            public void method1() {
                // TODO Auto-generated method stub
                super.method1();
            }
        };
    }
}

3中模式充分的体现了适配器模式的作用,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值