zoukankan      html  css  js  c++  java
  • 设计模式系列6:适配器模式(Adapter Pattern)

    定义

    将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。    --《设计模式》GoF


    UML类图


    使用场景

    1. 在遗留代码复用,类库迁移方面非常有用。
    2. 适配器模式要求我们尽可能地使用面向接口编程风格,这样扩展性和可维护性比较好。


    关键组成部分

    1,目标角色(Target):定义Client使用的与特定领域相关的接口。

    2,客户角色(Client):与符合Target接口的对象协同。

    3,被适配角色(Adaptee):定义一个已经存在并已经使用的接口,这个接口需要适配。

    4,适配器角色(Adapter):适配器模式的核心,它将对被适配Adaptee角色已有的接口转换为目标角色Target匹配的接口。对Adaptee的接口与Target接口进行适配。


    C#代码实现

    using System;
     
    namespace DoFactory.GangOfFour.Adapter.Structural
    {
      /// <summary>
    
      /// MainApp startup class for Structural
    
      /// Adapter Design Pattern.
    
      /// </summary>
    
      class MainApp
    
      {
        /// <summary>
    
        /// Entry point into console application.
    
        /// </summary>
    
        static void Main()
        {
          // Create adapter and place a request
    
          Target target = new Adapter();
          target.Request();
     
          // Wait for user
    
          Console.ReadKey();
        }
      }
     
      /// <summary>
    
      /// The 'Target' class
    
      /// </summary>
    
      class Target
    
      {
        public virtual void Request()
        {
          Console.WriteLine("Called Target Request()");
        }
      }
     
      /// <summary>
    
      /// The 'Adapter' class
    
      /// </summary>
    
      class Adapter : Target
    
      {
        private Adaptee _adaptee = new Adaptee();
     
        public override void Request()
        {
          // Possibly do some other work
    
          //  and then call SpecificRequest
    
          _adaptee.SpecificRequest();
        }
      }
     
      /// <summary>
    
      /// The 'Adaptee' class
    
      /// </summary>
    
      class Adaptee
    
      {
        public void SpecificRequest()
        {
          Console.WriteLine("Called SpecificRequest()");
        }
      }
    }

    运行结果:

    image

  • 相关阅读:
    UITextField editingDidEnd 不调用(不响应)
    修改 Navigation Bar 返回按钮文字和图片
    HTTPS抓包
    brew 基本使用方法
    Linux基本命令
    AR 初探
    汇编学习
    ios GCD ---- (1)
    axios导出或者下载
    Vue绑定图片src出现的问题
  • 原文地址:https://www.cnblogs.com/mcgrady/p/10370125.html
Copyright © 2011-2022 走看看