🇨🇳🐲🎉 本网站的中文版本尚处早期开发阶段。如果您发现其中存在错字、纰漏或其他任何问题,请随时联系 [email protected] 向我反馈。
适配器

适配器在 C# 中的实现

适配器是一种结构型设计模式 它能使不兼容的对象能够相互合作

适配器可担任两个对象间的封装器 它会接收对于一个对象的调用 并将其转换为另一个对象可识别的格式和接口

进一步了解适配器模式

在 C# 中使用模式

复杂度

流行度

使用示例 适配器模式在 C# 代码中很常见 基于一些遗留代码的系统常常会使用该模式 在这种情况下 适配器让遗留代码与现代的类得以相互合作

识别方法 Adapter is recognizable by a constructor which takes an instance of different abstract/interface type. When the adapter receives a call to any of its methods, it translates parameters to the appropriate format and then directs the call to one or several methods of the wrapped object.

概念示例

本例说明了适配器设计模式的结构并重点回答了下面的问题

  • 它由哪些类组成
  • 这些类扮演了哪些角色
  • 模式中的各个元素会以何种方式相互关联

Program.cs: 概念示例

using System;

namespace RefactoringGuru.DesignPatterns.Adapter.Conceptual
{
    // The Target defines the domain-specific interface used by the client code.
    public interface ITarget
    {
        string GetRequest();
    }

    // The Adaptee contains some useful behavior, but its interface is
    // incompatible with the existing client code. The Adaptee needs some
    // adaptation before the client code can use it.
    class Adaptee
    {
        public string GetSpecificRequest()
        {
            return "Specific request.";
        }
    }

    // The Adapter makes the Adaptee's interface compatible with the Target's
    // interface.
    class Adapter : ITarget
    {
        private readonly Adaptee _adaptee;

        public Adapter(Adaptee adaptee)
        {
            this._adaptee = adaptee;
        }

        public string GetRequest()
        {
            return $"This is '{this._adaptee.GetSpecificRequest()}'";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Adaptee adaptee = new Adaptee();
            ITarget target = new Adapter(adaptee);

            Console.WriteLine("Adaptee interface is incompatible with the client.");
            Console.WriteLine("But with adapter client can call it's method.");

            Console.WriteLine(target.GetRequest());
        }
    }
}

Output.txt: 执行结果

Adaptee interface is incompatible with the client.
But with adapter client can call it's method.
This is 'Specific request.'

适配器在其他编程语言中的实现

适配器在 Java 中的实现 适配器在 PHP 中的实现 适配器在 Python 中的实现 适配器在 Ruby 中的实现 适配器在 Swift 中的实现 适配器在 TypeScript 中的实现