• 设计模式之☞适配器模式,通俗易懂,一学就会!!!


    简介

      适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

    功能展示

    场景模拟

      外国出差,给笔记本充电,德国有一套德国标准,中国有一套中国标准(国标),国际有一套国际标准,插排上有不同的孔,二孔、三孔等等(案例不一定真实)。。。

    功能介绍

    1. 给笔记本充电

    代码实现

    德国标准

    德国接口:DBSocket.java

    package com.cyb.ssm.design_pattern.adapter;
    /**
     * 德国标准的插排
     * @author apple
     *
     */
    public interface DBSocket {
        void charge();
    }

    德国接口实现:DBSocketImpl.java

    package com.cyb.ssm.design_pattern.adapter;
    /**
     * 德国标准的插排
     * @author apple
     *
     */
    public class DBSocketImpl implements DBSocket {
    
        @Override
        public void charge() {
            System.out.println("使用两眼插孔充电。。。");
        }
    }

    国标标准(中国)

    国标接口:GBSocket.java

    package com.cyb.ssm.design_pattern.adapter;
    
    /**
     * 中国标准的插排
     * 
     * @author apple
     *
     */
    public interface GBSocket {
        void charge();
    }

    国标接口实现:GBSocketImpl.java

    package com.cyb.ssm.design_pattern.adapter;
    /**
     * 中国标准的插排
     * @author apple
     *
     */
    public class GBSocketImpl implements GBSocket {
    
        @Override
        public void charge() {
            System.out.println("使用三眼插孔充电。。。。");
        }
    }

    国际标准

    国际标准接口:GJBZSocket.java

    package com.cyb.ssm.design_pattern.adapter;
    
    /**
     * 国际标准插排
     * 
     * @author apple
     *
     */
    public interface GJBZSocket {
        void charge();
    }

    国际标准接口实现:GJBZSocketImpl.java

    package com.cyb.ssm.design_pattern.adapter;
    
    /**
     * 国际标准插排
     * 
     * @author apple
     *
     */
    public class GJBZSocketImpl implements GJBZSocket {
    
        @Override
        public void charge() {
            System.out.println("使用四眼插孔充电。。。。");
        }
    }

    适配器(重点)

    适配类:SocketAdapter.java

    package com.cyb.ssm.design_pattern.adapter;
    
    /**
     * 适配器(将不同类型的国标和德标都适配成国际标准)
     * 
     * @author apple
     * @param <T>
     *
     */
    public class SocketAdapter<T> implements GJBZSocket {
        private T socket;
    
        public SocketAdapter(T socket) {
            super();
            this.socket = socket;
        }
    
        @Override
        public void charge() {
            if (socket instanceof GBSocket) { // 适配国标
                ((GBSocket) socket).charge(); // 强转数据类型,执行
            } else if (socket instanceof DBSocket) { // 适配德标
                ((DBSocket) socket).charge(); // 强转数据类型,执行
            } else if (socket instanceof GJBZSocket) { // 适配国际标准
                ((GJBZSocket) socket).charge(); // 强转数据类型,执行
            }
        }
    }

    测试类:TestAdapter.java

    package com.cyb.ssm.design_pattern.adapter; 
    import org.junit.Test;
    
    /**
     * 适配器模式: 将不同类型的对象可以通过适配模式,在一起工作
     * 
     * @author apple
     *
     */
    public class TestAdapter {
        @Test
        public void test() {
            // 德标
            SocketAdapter<DBSocketImpl> socketAdapter1 = new SocketAdapter<DBSocketImpl>(new DBSocketImpl());
            socketAdapter1.charge();
            // 国标
            SocketAdapter<GBSocketImpl> socketAdapter2 = new SocketAdapter<GBSocketImpl>(new GBSocketImpl());
            socketAdapter2.charge();
            // 国际标准
            SocketAdapter<GJBZSocketImpl> socketAdapter3 = new SocketAdapter<GJBZSocketImpl>(new GJBZSocketImpl());
            socketAdapter3.charge();
        }
    }

    实现

  • 相关阅读:
    WebBrowser Control(三)Privacy Alert对话框
    工具栏添加控件
    OpenGL(一)Introduction
    WebBrowser Control(四)URL Security Zones
    OpenGL(二)三维变换
    STL(二)Iterators
    string与wstring转换
    vs2005制作安装包
    唉,又是数组越界的问题!
    CString之GetBuffer、ReleaseBuffer
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/12019467.html
Copyright © 2020-2023  润新知