适配器模式

一,理解:

1,书上的说法:

将一个类的接口转换成客户希望的另一个接口,Asapter模式使得原来由于接口不见同二不能一起工作的那些类一起工作

2,自己的理解:

通过一个桥梁将两个不兼容的接口连接起来

二,用法:

1,什么时候用?

(1)所需要的类与现在的系统不相符的时候用

(2)可以用于转换接口,将一个类插入到另一个类当中。

(3)两个类都不太容易修改的情况下使用

2,如何用?

主要是通过继承和依赖

3,重点是什么?

适配器继承现有的类,再将所需的类插入到原有类当中

4,优缺点是什么?

(1)优点:

  • 可以让特殊点的类也其他的类一起运行
  • 更加灵活
  • 类的复用性好

(2)缺点

  • 适配器使用太多会导致混乱,调用时也容易出错

5,生活中的相似举例:

(1)出国必带的转换电压器,国外和国内的电压是不同的,因此需要转换电压来充电

(2)平时我们使用的格式工厂,可以将现有的格式转换为其他的格式

三,举例:

举例就按照大话设计模式的例子来敲的代码:在NBA当中的姚明刚去时由于用英语不好便请了实时翻译,翻译就相当于一个转换接口,可以传达教练的话

主要分为三个类:前锋,中锋,后锋

主要的方法主要有:攻击,防守

1,先写出正常的球员的类:

abstract class Player
    {
        protected string name;
        public Player(string name)
        {
            this.name = name;
        }
        public abstract void Attrack();
        public abstract void Default();
    }

2,写出主要的三种不同球员位置的类,并继承球员的类:

 class Forwords : Player//前锋
    {
        public Forwords(string name) : base(name)
        { }
        public override void Attrack()
        {
            Console.WriteLine("前锋:{0}进攻", name);
        }
        public override void Default()
        {
            Console.WriteLine("前锋:{0}防守", name);
        }
    }
    class Center : Player//中锋
    {
        public Center(string name) : base(name)
        { }
        public override void Attrack()
        {
            Console.WriteLine("前锋:{0}进攻", name);
        }
        public override void Default()
        {
            Console.WriteLine("前锋:{0}防守", name);
        }
    }
    class Guards : Player//后卫
    {
        public Guards(string name) : base(name)
        { }
        public override void Attrack()
        {
            Console.WriteLine("后卫:{0}进攻", name);
        }
        public override void Default()
        {
            Console.WriteLine("后卫:{0}防守", name);
        }
    }

3,写一个外籍中锋的类:

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 );
        }

    }

4,翻译者类,相当于接口,可以通过接口将外籍中锋插入到类当中来

class Translator:Player
    {
        private ForeignCenter haha = new ForeignCenter();
            public Translator (string name ):base (name)/实例化一个内部的外籍中锋,表明翻译者与外籍 有关系
        {
            haha.Name = name;
        }
        public override void Attrack()/通过翻译告诉了中锋进攻
        {
            haha.进攻();
        }
        public override void Default()/同上
        {
            haha.防守();
        }
    }

5,客户端代码:

static void Main(string[] args)
        {
            Player b = new Forwords("巴蒂尔");
            b.Attrack();
            Player m = new Guards("麦克格雷迪");
            m.Default();
            Player xx = new Translator("姚明");
            xx.Default();
            xx.Attrack();
            Console.Read();

        }

6,结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值