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

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

    概述

    比如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就能对这个新类的实例进行适配。

    适配器的使用场景

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

  • 相关阅读:
    POJ3159 Candies —— 差分约束 spfa
    POJ1511 Invitation Cards —— 最短路spfa
    POJ1860 Currency Exchange —— spfa求正环
    POJ3259 Wormholes —— spfa求负环
    POJ3660 Cow Contest —— Floyd 传递闭包
    POJ3268 Silver Cow Party —— 最短路
    POJ1797 Heavy Transportation —— 最短路变形
    POJ2253 Frogger —— 最短路变形
    POJ1759 Garland —— 二分
    POJ3685 Matrix —— 二分
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/6762369.html
Copyright © 2011-2022 走看看