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

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
    这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
    我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。
    主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。
    JAVA应用:
    javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
    org.springframework.aop.framework.adapter.AdvisorAdapter
    org.springframework.web.servlet.HandlerAdapter

    第一种通过继承实现

    public interface Target {
        void request();
    }
    public class ConcreteTarget implements Target {
        @Override
        public void request() {
            System.out.println("concreteTarget目标方法");
        }
    
    }
    public class Adaptee {
        public void adapteeRequest(){
            System.out.println("被适配者的方法");
        }
    
    }
    public class Adapter extends Adaptee implements Target{
        @Override
        public void request() {
            //...
            super.adapteeRequest();
            //...
        }
    }
    public class Test {
        public static void main(String[] args) {
            Target target = new ConcreteTarget();
            target.request();
    
            Target adapterTarget = new Adapter();
            adapterTarget.request();
        }
    }

    第二种通过组合实现

    public interface Target {
        void request();
    }
    public class ConcreteTarget implements Target {
        @Override
        public void request() {
            System.out.println("concreteTarget目标方法");
        }
    
    }
    public class Adaptee {
        public void adapteeRequest(){
            System.out.println("被适配者的方法");
        }
    
    }
    public class Adapter implements Target{
        private Adaptee adaptee = new Adaptee();
    
        @Override
        public void request() {
            //...
            adaptee.adapteeRequest();
            //...
        }
    }
    public class Test {
        public static void main(String[] args) {
            Target target = new ConcreteTarget();
            target.request();
    
            Target adapterTarget = new Adapter();
            adapterTarget.request();
        }
    }
  • 相关阅读:
    Hufman编码实现运用1 (原理不描述)
    E
    1178: [Apio2009]CONVENTION会议中心
    1071: [SCOI2007]组队
    #333. 【NOIP2017】宝藏
    CF 96 D. Volleyball
    CF 987 D. Fair
    qbxt的题:运
    qbxt的题:找一个三元环
    4361: isn
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14653639.html
Copyright © 2011-2022 走看看