适配器模式

来源:互联网 发布:宜宾行知学校报名 编辑:程序博客网 时间:2024/05/13 15:01

1.适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口,Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作

 

2.应用:1)使用一个已经存在的类,如果它的接口,也就是它的方法和你要求的不相同时,就应该考虑用适配器模式

       2)双方都不太容易修改的时候再使用适配器模式适配

 

3.练习:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 适配器模式{    class Program    {        static void Main(string[] args)        {            Player mPlayer = new Forward("巴蒂尔");            mPlayer.Attack();            Player yPlayer = new Translator("姚明");            yPlayer.Attack();            yPlayer.Defense();            Console.ReadKey();        }    }    #region- 篮球运动员 -    abstract class Player    {        protected string name;        public Player(string name)        {            this.name = name;        }        public abstract void Attack();        public abstract void Defense();    }    #endregion    #region- 前锋 -    class Forward : Player    {        public Forward(string name)            : base(name)        {        }        public override void Attack()        {            Console.WriteLine("前锋 {0} 进攻",name);        }        public override void Defense()        {            Console.WriteLine("前锋 {0} 防守",name);        }    }   #endregion    #region- 中锋 -    class Center : Player    {        public Center(string name)            : base(name)        {        }        public override void Attack()        {            Console.WriteLine("中锋{0}进攻",name);        }        public override void Defense()        {            Console.WriteLine("中锋{0}防守",name);        }    }    #endregion    #region- 外籍中锋 -    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);        }    }   #endregion    #region- 翻译者(适配器)    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.防守();        }    }   #endregion}

结果:

 


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>