• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

ncscherb

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

适配器模式

1.引子

     适配器:如果需要在欧洲国家使用美国制造的笔记本,可能需要使用一个交流电的适配器,将欧洲110V的交流电转换成美国220V的交流电。因而,适配器工作起来就像一个中间人,将客户所发出的请求转换成厂商类能理解的请求。

2.定义

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

        image

3.理解定义

  1. 适配器模式可以通过创建适配器进行接口转换,让不兼容的接口变成兼容。
  2. 适配器模式可让客户从现实的接口解耦。如果在一段时间之后,我们想要改变接口,如果不用适配器,就必须改写客户端的代码来调用这个新的接口,将会花费大量的时间。适配器可以将改变的部分封装起来,客户就不必为了应对不同的接口而每次跟着修改。

4.将火鸡适配为鸭子

 

/*
 * 鸭子接口
 */
public interface Duck {
    public void quack();//鸭子呱呱叫
    public void fly();
}
//火鸡接口
public interface Turkey {
    public void gobble();//火鸡咯咯叫
    public void fly();
}
//具体火鸡类,实现接口
public class WildTurkey implements Turkey
{

    @Override
    public void gobble() {
        // TODO Auto-generated method stub
        System.out.print("Gobble gobble");
    }

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("I,m flying a short distance");
    }
}

 

适配器类

//将火鸡适配为鸭子
public class TurkeyAdapter implements Duck { //首先,实现想转换成的类型接口,也就是您的客户所期望看到的接口。
    Turkey turkey;
    
    public TurkeyAdapter(Turkey turkey) //接着,需要取得要适配对象的引用,利用构造器取得这个引用。
    {
        this.turkey = turkey;
    }
    
    //实现接口中的所有方法,quack在类之间转换很简单,只要调用gobble()方法就可以了
    //即将火鸡的“咯咯叫”转为鸭子的“呱呱叫”
    @Override
    public void quack() { 
        // TODO Auto-generated method stub
        turkey.gobble();
        
    }

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        for(int i=0;i<5;i++)
        {
            turkey.fly();
        }
    }
    
}

 

客户端主程序

public class DuckTest {
    public static void main(String[] args)
    {
        WildTurkey turkey = new WildTurkey();  //火鸡
        Duck turkeyAdapDuck = new TurkeyAdapter(turkey);  //火鸡适配为鸭子
        
        testDuck(turkeyAdapDuck);  //传入适配器(鸭子)
    }
    
    static void testDuck(Duck duck)  //客户端方法,他留的是鸭子的接口,并调用它的quack()和fly()方法
    {
        duck.quack();
        duck.fly();
    }
}
从各处转载java文件

posted on 2016-03-25 20:32  ncscherb  阅读(235)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3