七、适配器模式

来源:互联网 发布:淘宝同城鲜花速递 编辑:程序博客网 时间:2024/06/05 02:09

适配器模式

定义:将一个类的接口,转化成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。

 

我们周围的适配器

最常见的例子是三孔插座和两孔插座,如果墙上有一个三孔插座,但是我们的充电器又只能使用两孔的插座,那么我们通常是接一条带有两孔和三孔的插座其插头是三个的,以适应不同的需求。

 

面向对象适配器

假设已有一个软件系统,你希望它能和一个新的厂商类库搭配使用,但是这个新厂商的接口不同于旧厂商的接口,不改变现有代码,如何解决这个问题?写一个类,将新厂商接口转接成你所期望的接口。

这个适配器实现了你的类所期望的接口,而且也能和厂商的接口沟通。

 

火鸡适配器

现在假设你缺鸭子对象,想用一些火鸡对象冒充。这两个对象接口不同,不能直接用,所以来写个适配器吧。

先看鸭子接口

public interface Duck{

    public void quack();

    public void fly();

    //鸭子接口具备呱呱叫和飞行的能力

}

绿头鸭是鸭子的子类

public class MallardDuck implements Duck{

    public void quack()

    {

        System.out.println(“Quack”);

    }

    public void fly()

    {

        System.out.println(“I’mflying”);

    }

 

火鸡接口

public interface Turkey{

public void gobble();//火鸡不会呱呱叫,只会咯咯叫

public void fly();//火鸡会飞,虽然飞不远

}

火鸡的具体实现类

public class WildTurkey implements Turkey{

    public void gobble()

    {

        System.out.println(“gobblegobble”);

    }

    public void fly()

    {

        System.out.println(“I’mflying  a short distance”);

    }

 

火鸡适配器

//首先,要实现想转换成的类型接口,也就是你的客户所期望看到的接口

public class TurkeyAdapter implements Duck{ 

    Turkey turkey;  

    //接着,要取得适配的对象的引用

    public TurkeyAdapter(Turkeyturkey){  

        this.turkey = turkey;  

    }  

    //实现接口中所有的方法

    public void quack(){  

       turkey.gobble();  

    }  

//火鸡的飞行距离很短,不像鸭子可以长途飞行,

//要让鸭子和火鸡的飞行对应,必须连续五次调用火鸡的fly来完成

    public void fly(){  

         for(inti=0;i<5;i++){  

            turkey.fly();  

        }  

    }  

}


测试适配器 

public class DuckTestDrive{   

     public static voidmain(String[] args){  

          //创建一只鸭子

          MallardDuck duck = new MallardDuck();  

          //创建一只火鸡

          WildTurkey turkey = new WildTurkey();  

          //将火鸡包装进火鸡适配器中,使它像一只鸭子

          DuckturkeyAdapter = new TurkeyAdapter(turkey);  


          //测试这只火鸡,让它咯咯叫,让它飞行 

         System.out.println("the Turkey says ...");  

         turkey.gobble();  

         turkey.fly();  


         //调用testDuck方法来测试鸭子

         System.out.println("\nthe duck says...");  

         testDuck(duck);  


         //传入一只假装是鸭子的火鸡

        System.out.println("\n the turkeyAdapter says ...");  

        testDuck(turkeyAdapter);             

    }  

      

    public static voidtestDuck(Duck duck){  

           duck.quack();  

          duck.fly(); 

    }  

}  

 

0 0
原创粉丝点击