适配器模式

简介: 适配器模式

什么是适配器模式?


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


什么时候使用?


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


2、客户统一调用同一接口,可以更简单、更直接、更紧凑


3、双方都不容易修改的时候再使用适配器模式适配


结构图


ed4cd09d1daacc9c9a0fc6bd3731a9de_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTE1NQ==,size_16,color_FFFFFF,t_70.jpg


例子:姚明再国外参加篮球训练,开始他是听不懂国外选手说话的,但是又不能不沟通,所以姚明就需要一个翻译,这个翻译就是适配器

球场要做的进攻还是防守以及各个球员是谁

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 Center : Player
    {
        public Center(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);
        }
        #endregion
    }

外籍中锋(姚明)

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.防守();
        }
    }

客户端

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

相关文章
|
2月前
|
设计模式 缓存 C#
适配器模式与桥接模式:一分钟浅谈
【10月更文挑战第14天】本文介绍了面向对象设计中的适配器模式和桥接模式,包括它们的概念、应用场景、实现方式及常见问题。适配器模式通过接口转换解决不兼容问题,适用于系统扩展和遗留系统升级;桥接模式通过分离抽象和实现提高灵活性,适用于多维度变化和避免类爆炸。文中还提供了C#代码示例以加深理解。
42 3
|
4月前
|
Windows
|
7月前
|
设计模式 C++
结构型 适配器模式
结构型 适配器模式
39 0
|
7月前
|
设计模式
【适配器模式】—— 每天一点小知识
【适配器模式】—— 每天一点小知识
|
Java API
适配器模式的运用
适配器模式的运用
83 0
|
设计模式 数据库 C++
2023-6-15-第六式适配器模式
2023-6-15-第六式适配器模式
93 0
|
设计模式 前端开发
关于适配器模式我所知道的
关于适配器模式我所知道的
48 0
|
Java 程序员 API
结构型模式-适配器模式
结构型模式-适配器模式
89 0
|
设计模式
我学会了,适配器模式
适配器模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。
100 0
我学会了,适配器模式
|
设计模式 Java Spring
适配器模式详解与应用
引用一个最经典的例子,我们自己家里的电压都是220V的,而早期的手机充电时所用的都是5V的电压。要想让手机在220V的家庭电压下充电,就需要一个电源适配器。在编程中,也经常会出现一个类程序无法直接去使用,而需要通过适当变换的行为抽象出来的设计模式就是适配器模式。