Administrator
发布于 2024-08-01 / 30 阅读
0
0

适配器模式

问题描述

对于刚去NBA打球的姚明,需要随时有一个翻译在身边。仿照该情形实现适配器模式。

代码实现

运动员抽象类

    public abstract class  Player
    {
        public Player(string name)
        {
            mName = name;
        }
        protected string mName;
        
        public abstract void Attack();
        public abstract void Defense();

    }

篮球运动员具体类

public class  Forwards : Player
{
    public Forwards(string name) : base(name) { }
    public override void Attack()
    {
        Console.WriteLine($"前锋 {mName} 进攻");
    }

    public override void Defense()
    {
        Console.WriteLine($"前锋 {mName} 防守");
    }
}

public class Guards : Player
{
    public Guards(string name) : base(name) { }

    public override void Attack()
    {
        Console.WriteLine($"后卫 {mName} 进攻");
    }

    public override void Defense()
    {
        Console.WriteLine($"后卫 {mName} 防守");
    }
}

Adaptee类

public class ForeignCenter
{
    private string name;
    public string mName
    {
        get { return name; }
        set { name = value; }
    }

    public void attack()
    {
        Console.WriteLine($"外籍中锋 {name} 进攻");
    }

    public void defense()
    {
        Console.WriteLine($"外籍中锋 {name} 防守");
    }
}

适配类

public class Translator : Player
{
    private ForeignCenter wjzf = new ForeignCenter();
    public Translator(string name) : base(name)
    {
        wjzf.mName = name;
    }

    public override void Attack()
    {
        wjzf.attack();
    }

    public override void Defense()
    {
        wjzf.defense();
    }
}

Main方法:

internal class Program
{
    static void Main(string[] args)
    {
        Player a = new Forwards("巴蒂尔");
        a.Attack();

        Player m = new Guards("麦克格雷迪");
        m.Attack();


        Player yaoming = new Translator("姚明");
        yaoming.Attack();
        yaoming.Defense();
    }
}

执行结果

前锋 巴蒂尔 进攻
后卫 麦克格雷迪 进攻
外籍中锋 姚明 进攻
外籍中锋 姚明 防守

UML图


评论