C# 设计模式, 适配器模式(Adapter 两种)

首次发布:2024-01-17 15:36

家用电,电压为 220v,经过适配器,输出为 18v,可供我的笔记本进行使用。

第一种:类适配器(使用继承)

Portal.cs 类

/// <summary>
/// 入口
/// </summary>
public class Portal
{
    private readonly string _msg;

    public Portal(string msg)
    {
        _msg = msg;
    }

    /// <summary>
    /// 输入
    /// </summary>
    public void Input()
    {
        Console.WriteLine(_msg + " --> 18v。");
    }
}

IOutput.cs 接口

interface IOutput
{
    /// <summary>
    /// 输出
    /// </summary>
    void Output();
}

Adapter.cs 类

/// <summary>
/// 适配器
/// </summary>
class Adapter : Portal, IOutput
{
    public Adapter(string msg) : base(msg)
    {
    }

    public void Output()
    {
        Input();
    }
}

方法调用

class Program
{
    static void Main(string[] args)
    {
        IOutput adapter = new Adapter("220v");
        adapter.Output(); //结果为      220v  --> 18v。
    }
}

第二种:对象适配器(使用委托)

Portal.cs 类

/// <summary>
/// 入口
/// </summary>
public class Portal
{
    private readonly string _msg;

    public Portal(string msg)
    {
        _msg = msg;
    }

    public void Input()
    {
        Console.WriteLine(_msg + " --> 18v");
    }
}

Export.cs 类

/// <summary>
/// 出口
/// </summary>
public abstract class Export
{
    public abstract void Output();
}

Adapter.cs 类

public class Adapter : Export
{
    private readonly Portal _portal;

    public Adapter(string msg)
    {
        _portal = new Portal(msg);
    }

    public override void Output()
    {
        _portal.Input();
    }
}

方法调用

class Program
{
    static void Main(string[] args)
    {
        Export adapter = new Adapter("220v");
        adapter.Output(); //结果为      220v  --> 18v。
    }
}