c#面向对象23种设计模式——"适配器模式"

250 阅读2分钟

一:概述

适配器模式: 把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。适配器模式有类适配器模式对象适配器模式两种形式。

二、举例说明

1、我有一个用户抽象类(Users),这个用户拥有一个游戏抽象方法(Game)。

2、我们业务中有一个年轻用户类(YoungUser)继承用户抽象类,并且实现了用户抽象类的方法(Game)。

3、此时我们新增一个功能,区分年轻人年龄段,不同年龄段的(Game)方法还有新增业务,那么此时我们只需要继承年轻人的(Game)方法并新加新的业务。这就是我们的————"适配器模式"

三、代码演示

源码如下:

/// <summary>
/// 用户抽象类
/// </summary>
public abstract class Users
{
    public string Id { get; set; }
    public string Name { get; set; }

    /// <summary>
    /// 抽象游戏方法
    /// </summary>
    public abstract void Game();
}

/// <summary>
/// 年轻人类
/// </summary>
public class YoungUser : Users
{
    public override void Game()
    {
        Console.WriteLine("年轻人玩游戏");
    }
}

/// <summary>
/// 80后类
/// </summary>
public class EightUser: YoungUser
{
    private Users _user = new YoungUser();
    public EightUser(Users users)
    {
        _user = users;
    }

    public override void Game()
    {
        base.Game();
        Console.WriteLine("80后" + this._user.Name + "看露天电影");
    }
}

四、代理模式的效果

方法调用:

    //适配器模式: 通过组合+继承实现动态扩展
    // GET: api/<AdapterController>
    [HttpGet]
    public IEnumerable<string> Get()
    {
        Users users = new YoungUser()
        {
            Id = "1",
            Name = "小白"
        };
        users.Game();
        Console.WriteLine();

        users = new EightUser(users);
        users.Game();

        return new string[] { "value1", "value2" };
    }

我这里写了一个接口去实现年轻人的(Game)方法 和 80后的人的(Game)方法。

image.png 如图所示: 我们新加的80后的人的(Game)方法添加到新业务并不会影响到系统中年轻人的方法,并且80后的方法也新增了新的功能!!!

以上就是我们c#面向对象23种设计模式之——"适配器模式"的简单应用,大家还有更好的应用方法,欢迎到评论区讨论!!!