现在的位置: 首页 > 综合 > 正文

适配器模式

2013年10月27日 ⁄ 综合 ⁄ 共 1482字 ⁄ 字号 评论关闭

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
}

结果:

 

抱歉!评论已关闭.