设计模式之适配器模式

来源:互联网 发布:nginx 动态服务器 编辑:程序博客网 时间:2024/06/06 11:39

适配器模式

       什么是适配器?举个例子,假设你有一台三孔插头的家用电器,但是插线板上只有一个两孔的插座,此时我们没办法给家电供电。因为三孔插头无法插入两孔的插座里面,它们的类型不匹配。这个时候我们就需要一个转接头,插入三孔插头就能转换成两孔的插头,这个时候我们就能插入插座中了。在这个过程中,转接头就可以看作是一个适配器。
      记得我们讲第一个设计模式时,用的是鸭子模型,这次我们在此基础上扩展来讲适配器模式。假设我们缺少鸭子对象,想用一些火鸡对象来冒充。先看一下鸭子和火鸡类。
鸭子接口:
package com.my.adapter;public interface Duck {    public void quack();    public void fly();}
绿头鸭:
package com.my.adapter;public class MallardDuck implements Duck {    public void quack(){        System.out.println("Quack");    }    public void fly(){        System.out.println("I'm flying");    }}
火鸡接口:
package com.my.adapter;public interface Turkey {    public void gobble();//火鸡咯咯叫    public void fly();}
火鸡:
package com.my.adapter;public class WildTurkey implements Turkey {    public void gobble(){        System.out.println("Gobble gobble");    }    public void fly(){        System.out.println("I'm flying a short distance");    }}

显而易见:因为火鸡和鸭子的接口不同,所以我们不能公然拿来用。
创建一个适配器:
package com.my.adapter;public class TurkeyAdapter implements Duck {    //首先需要实现想转换成的类型接口,也就是客户希望看到的接口。    Turkey turkey;    public TurkeyAdapter(Turkey turkey){        //接着,需要取得要适配的对象引用,这里我们用构造器取得这个引用。        this.turkey = turkey;    }    public void quack(){        turkey.gobble();    }    public void fly(){        for(int i=0;i<5;i++){            turkey.fly();        }    }}
run:
客户使用适配器的过程如下:
1、客户通过目标接口调用适配器的方法对适配器发出请求。
2、适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口。
3、客户接收到调用的结果,但并未察觉这一切是适配器在起转换的作用。
适配器模式类图:


原创粉丝点击