• 适配器模式


    适配器模式(别名:包装器):将一个类的接口装化成客户希望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    概述

    比如A型螺母可以使用A型螺丝,B型螺母可以使用B型螺丝,现在需要在A型螺母上使用B型螺丝,这时必须使用适配器。

    模式的结构

    目标(Target):一个接口,该接口是客户想使用的接口

    被适配者(Adaptee):被适配者是一个已经存在的接口或抽象类

    适配器(Adapter):一个类,该类实现了目标接口并包含被适配者的引用。

    模式的使用

    一个两孔插座对应电视机插头,一个三孔插座对应洗衣机插头。现在我们想使用新的三孔插座来使用电视机和洗衣机。

    目标(Target):TreeOutlet.java

    /**
     * 目标
     */
    public interface TreeOutlet {
        public abstract void connect();
    }
    

     被适配者:TwoOutlet.java

    /**
     * 被适配者
     */
    public interface TwoOutlet {
        public abstract void connect();
    }
    

     适配器:TreeOutletAdapter.java

    /**
     * 适配器
     */
    public class TreeOutletAdapter implements TreeOutlet{
        TwoOutlet outlet;
        TreeOutletAdapter(TwoOutlet outlet){
            this.outlet=outlet;
        }
        public void connect(){
            outlet.connect();
        }
    }
    

     程序应用

    洗衣机类

    /**
     * 洗衣机
     */
    public class Wash implements TreeOutlet{
        String name;
        Wash(){
            name="骆驼牌洗衣机";
        }
        Wash(String name){
            this.name=name;
        }
        public void connect(){
            turnOn();
        }
        public void turnOn(){
            System.out.println(name+"开始洗衣服");
        }
    }
    

    电视机类

    /**
     * 电视机
     */
    public class TV implements TwoOutlet{
        String name;
        TV(){
            name="熊猫牌电视机";
        }
        TV(String name){
            this.name=name;
        }
        public void connect(){
            turnOn();
        }
        public void turnOn(){
            System.out.println(name+"开始播放节目");
        }
    }
    

     应用

    /**
     * 应用程序
     */
    public class Application {
        public static void main(String[] args){
            //目标接口,三孔插座
            TreeOutlet outlet;
            Wash wash = new Wash();
            outlet = wash;
            //洗衣机使用三孔插座
            outlet.connect();
    
            TV tv = new TV();
            //把电视插在适配器上适配器
            TreeOutletAdapter adapter = new TreeOutletAdapter(tv);
            //把适配器插在三孔插座上
            outlet = adapter;
            //电视接通三孔插座
            adapter.connect();
        }
    }
    

     适配器模式的优点

    • 目标和被适配者完全解耦合
    • 满足“开-闭原则”。当添加一个实现Adaptee接口的新类时,不必要修改Adapter,Adapter就能对这个新类的实例进行适配。

    适配器的使用场景

    一个程序想使用已经存在的类,但该类所实现的接口与当前程序所使用的接口不一致。

  • 相关阅读:
    集训队日常训练20180518-DIV1
    集训队日常训练20180513-DIV1
    python类的使用与多文件组织
    性能指标
    python调用.so
    动态链接库的使用
    python读写xml文件
    使用python读取文本中结构化数据
    python画图
    numpy及scipy的使用
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/6762369.html
Copyright © 2020-2023  润新知