zoukankan      html  css  js  c++  java
  • 适配器模式

    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文件
  • 相关阅读:
    【转】logback logback.xml常用配置详解(三) <filter>
    【转】logback logback.xml常用配置详解(二)<appender>
    【转】logback logback.xml常用配置详解(一)<configuration> and <logger>
    webhook: requestbin
    Docker: repository, image, container
    Python 知识点
    MySql: 常见sql语句
    MySql: 常见错误
    Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!
    这些好用的 Chrome 插件,提升你的工作效率
  • 原文地址:https://www.cnblogs.com/ncscherb/p/5320874.html
Copyright © 2011-2022 走看看