适配器模式

本文介绍了设计模式中的适配器模式,它是一个转换接口,能让两个不兼容的类变得兼容,以翻译官为例形象说明。还给出了具体代码,包括抽象球员类、正常球员类、外籍球员类、翻译者类(适配器)和客户端,并对代码中外籍球员部分的工作流程进行了分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单易懂,适配器就是一个转换接口,将两个不能相互兼容的类变成可以兼容。设计模式中的例子用的是翻译官,形象生动。将听不懂外语的中国球员分配一个翻译官,这样他就可以听得懂外语,可以正常的工作了。

可见,适配器也是单独的一个类。工作流程:翻译官(适配器类)将英语转换成汉语告诉中国球员(需要转换的类),中国球员开始打球。

具体代码如下,然后进行分析。

抽象球员类:

abstract class Player//球员类,进攻和防守两个方法
    {
        protected string name;
        public Player(string name)
        {
            this.name = name;
        }
        public abstract void Attack();
        public abstract void Defense();
    }

正常球员类,继承了上面的球员类。

class Forwards:Player//前锋类
    {
        public Forwards(string name):base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine("前锋{0}进攻",name);
        }
        public override void Defense()
        {
            Console.WriteLine("前锋{0}防守",name);
        }
    }
class Guards:Player//后卫类
    {
        public Guards(string name) : base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine("后卫{0}进攻", name);
        }
        public override void Defense()
        {
            Console.WriteLine("后卫{{0}防守", name);
        }
    }

外籍球员类,是单独的一个类,并继承球员类。

 class ForeignCenter //外籍中锋类
    {
        private string name;
        public string Name//之所以用的是属性,是为了区分其他两个球员类
        {
            get { return name; }
            set { name = value; }
        }
        public void 进攻()//外籍球员只认识汉字
        {
            Console.WriteLine("外籍中锋{0}进攻", name);
        }
        public  void 防守()
        {
            Console.WriteLine("外籍中锋{0}防守", name);
        }
    }

翻译者类(适配器),将英语转换成汉语,这里翻译者类也是继承球员类

 class Translator:Player//翻译者类
    {
        private ForeignCenter wjzf = new ForeignCenter();
        public Translator(string name):base(name)
        {
            wjzf.Name = name;
        }
        public override void Attack()
        {
            wjzf.进攻();
        }
        public override void Defense()
        {
            wjzf.防守();
        }

    }

客户端

 class Program
    {
        static void Main(string[] args)
        {
            
            Player b = new Forwards("小明");
            b.Attack();
            Player m = new Guards("小红");
            m.Attack();

            Player ym = new Translator("姚明");//翻译者告诉姚明要进攻和防守
            ym.Attack();
            ym.Defense();
            Console.Read();

        }
    }

分析:

上面的两种里式转换就不分析了,主要介绍下面的外籍球员:

1、下面的代码将“姚明”先传给了Player类,又因为Translator是继承了Player父类的构造方法,所以通过代码又将“姚明”给了Translator中的Name。(在这一步之前,Translator类中声明了外籍球员类)

Player ym = new Translator("姚明")

2、调用Translator类中的方法,Translator类中的方法就是调用外籍球员类的方法。也就是告诉外籍球员怎么做。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值