ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#适配器模式(Adapter)

2021-10-29 12:02:21  阅读:183  来源: 互联网

标签:Adapter Console name c# 适配器 internal void WriteLine public


无意间看到ArrayList的Adapter方法,没学过,学习一下

做了一个最简单的demo,一起来学一下吧

这是一个设计模式,叫适配器模式,一开始不是很理解,看了大话模式里的适配器模式之后,自己做了练习就理解了

1.下面是英文文档转换中文文档的适配器Demo

客户端:

//就拿开发文档举例吧,一开始发布的版本都是英文版,我们需要中文版
    internal class Common
    {
        public void English()
        {
            Console.WriteLine("英文版");
        }
    }
    //定义中文类
    internal class ChineseVersion
    {
        /// <summary>
        /// 定义一个中文版的方法
        /// </summary>
        public virtual void Chinese()
        {
            Console.WriteLine("中文版");
        }
    }
    /// <summary>
    /// 继承中文版
    /// </summary>
    internal class Translate: ChineseVersion
    {
        //虽然是重写中文版的方法,但是调用的却是英文版原版的文档,所以翻译过来就是我们要的英文版翻译成中文的文档了
        private Common common = new();
        
        public override void Chinese()
        {
            base.Chinese();
            common.English();
        }
    }
中英文转换

服务端调用(就是控制台调用)

Translate translate = new();
translate.Chinese();
program

 

2.下面这个是拿NBA球星姚明举例,是跟着大话设计模式做的,去了美国之后的姚明语言不通,这时候该怎么办呢,需要一个翻译,所以这个时候也可以体现我们的适配器模式

//设计一个球员抽象类,传入名称,有进攻和防守的抽象方法
    //后卫,中锋,前锋都是球员
    /// <summary>
    /// 球员抽象类
    /// </summary>
    internal abstract class Player
    {
        protected string name;
        internal Player(string name)
        {
            this.name = name;
        }
        public abstract void Attack();
        public abstract void Defend();
    }
    /// <summary>
    /// 后卫
    /// </summary>
    internal class Guard : Player
    {
        internal Guard(string name):base(name)
        {

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

        public override void Defend()
        {
            Console.WriteLine($" 后卫 {name} 防守");
        }
    }
    /// <summary>
    /// 中锋
    /// </summary>
    internal class Centre : Player
    {
        internal Centre(string name) : base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine($" 中锋 {name} 进攻");
        }

        public override void Defend()
        {
            Console.WriteLine($" 中锋 {name} 防守");
        }
    }
    /// <summary>
    /// 前锋
    /// </summary>
    internal class Forward : Player
    {
        internal Forward(string name) : base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine($" 前锋 {name} 进攻");
        }

        public override void Defend()
        {
            Console.WriteLine($" 前锋 {name} 防守");
        }
    }
    /// <summary>
    /// 外籍中锋
    /// </summary>
    internal class ForeignCentre
    {
        //因为外部一会要调用这个变量,所以不设置私有
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public void 进攻()
        {
            Console.WriteLine(" 外籍中锋{0} 进攻",name);
        }
        public void 防守()
        {
            Console.WriteLine(" 外籍中锋{0} 防守", name);
        }
    }
    /// <summary>
    /// 翻译官
    /// </summary>
    internal class Translator : Player
    {
        private ForeignCentre foreignCentre=new ForeignCentre();
        internal Translator(string name):base(name)
        {
            foreignCentre.Name = name;
        }
        public override void Attack()
        {
            foreignCentre.进攻();
        }

        public override void Defend()
        {
            foreignCentre.防守();
        }
    }
客户端
            Player forward = new Forward("巴蒂尔");
            forward.Attack();
            forward.Defend();
            Player Centre = new Translator("姚明");
            Centre.Attack();
            Centre.Defend();
               
服务端

又get了一个技能

简单来说,就是你需要什么类型的数据,我就输出什么类型的数据,里面的数据不变,都给你存起来,只是省去了中间类型转换的复杂操作了,

你需要看中文文档,我给你输出中文文档,你只需要把英文版的文档给我,我就给你中文文档

标签:Adapter,Console,name,c#,适配器,internal,void,WriteLine,public
来源: https://www.cnblogs.com/humblexwang/p/15479699.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有