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

    在学习设计模式时,看到了这篇文章,感觉还不错,很容易看懂,于是就转载下来,是用Java实现的。

    这是一个 实际的例子:
    假设我们要到德国去旅游,但是德国的插座和中国的插座的标准不一眼,这是电源适配器就起作用了。
    这时我们有两个标准 德国标准(DB)和 中国标准(GB)

    // 德国标准
    public interface DBSocketInterface(){
        void powerWithDBStandar();  // 利用德国的标准充电
    }

    德国插座实现德国接口

    public class DBSocket implements DBSocketInterface(){
        public void powerWithDBStandar(){
            System.out.println("使用德国标准充电");
        }
    }

    德国的hotel是一个客户端,它的里头有德标的接口,可以使用德标的接口给手机充电

    public class Hotel{
        private DBSocketInterface dbsocket;
        public Hotel(){}
        public Hotel(DBSocketInterface dbsocket){ /
            this.dbsocket = dbsocket;
        }
        public void setSocket(DBSocketInterface dbsocket){
            this.dbsocket = dbsocket;
        }
        public void charge(){
            dbsocket.powerWithDBStandar();  // 使用德标的插口充电
        }
    }

    如果这是我去德国旅行,那么这时我就不能直接使用德国的插座为我的手机充电,这时候适配器就发挥了作用。
    * 这是中国的标准:*

    public interface GBSocketInterface(){
        void powerWithGBStandar();  //使用国标充电
    }

    中国插座实现中国标准接口

    public class GBSocket implements GBSocketInterface(){
        public void powerWithGBstandar(){
            System.out.println("使用国标充电");
        }
    }

    下面是适配器类的实现:

    class SocketAdapter implements DBSocketInterface{
        private GBSocketInterface gbsocket;
        public SocketAdapter(GBSocketInterface gbsocket){
            this.gbsocket = gbsocket;
        }
        public void powerWithDBStandar(){
            gbsocket.powerWithGBStandar();
        }
    }

    现在去到德国旅游,带去的充电器是国标的

    GBSocketInterface gbSocket = new GBSocket();

    来到德国后,找到一家hotel住下,这时这家hotel的插座是德标的,

    Hotel hotel = new Hotel();

    由于无法充电这时,适配器就起了作用了,我的充电器完全可以插在适配器上的,因为这是国标的适配器

    SocketAdapter socketAdapter = new SocketAdapter(gbSocket);

    再将适配器的下端插到宾馆的插座上

    hotel.setSocket(socketAdapter)

    这时就能愉快的在hotel中充电了

    hotel.charge()

    Note:

    1. 必须符合德国标准的接口,否则的话还是没办法插到德国插座中

    2. 在调用上面实现的德标接口进行充电时,提供一种机制,将这个调用转到对国标接口的调用 。

    这就要求:

    1. 适配器必须实现原有的旧的接口

    2. 适配器对象中持有对新接口的引用,当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。

  • 相关阅读:
    Flink延时监控
    FLink全链路时延—测量方式
    Linux搭建SFTP服务器
    Red Hat:USING AMQ STREAMS WITH MIRRORMAKER 2.0
    idea 搭建运行kafka 源码
    Kafka Connect Concepts
    Java IPv6相关属性preferIPv4Stack、preferIPv6Addresses介绍
    如何确定Flink反压的根源?How to identify the source of backpressure?
    如何成为 Apache 项目的 Committer
    Apache Kafka KIP 介绍
  • 原文地址:https://www.cnblogs.com/pluviophile/p/7460329.html
Copyright © 2011-2022 走看看