一:概述
适配器模式: 把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。适配器模式有类适配器模式和对象适配器模式两种形式。
二、举例说明
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)方法。
如图所示: 我们新加的80后的人的(Game)方法添加到新业务并不会影响到系统中年轻人的方法,并且80后的方法也新增了新的功能!!!
以上就是我们c#面向对象23种设计模式之——"适配器模式"的简单应用,大家还有更好的应用方法,欢迎到评论区讨论!!!