设计模式之适配器模式

 

正文

什么是适配器模式:将一种接口通过适配器转换成另一种接口。适配器相当是中间转换。

一个简单的适配器

下面,我们将一只火鸡变成一只鸭子

实现

鸭子:

    public interface Duck
    {
        void quack();
        void fly();
    }

    class MallardDuck : Duck
    {
        public void fly()
        {
            Console.WriteLine("fly");
        }

        public void quack()
        {
            Console.WriteLine("quack");
        }
    }

火鸡:

    interface Turkey
    {
        void gobble();
        void fly();
    }

    class WildTurkey : Turkey
    {
        public void fly()
        {
            Console.WriteLine("fly");
        }

        public void gobble()
        {
            Console.WriteLine("gobble");
        }
    }

适配器:

    class TurkeyAdapter : Duck
    {
        public TurkeyAdapter(Turkey turkey)
        {
            this.turkey = turkey;
        }

        private Turkey turkey;
        public void fly()
        {
            turkey.fly();
        }

        public void quack()
        {
            turkey.gobble();
        }
    }

测试:

        static void Main(string[] args)
        {
            #region 一个简单的适配器模式
            MallardDuck duck=new MallardDuck();

            WildTurkey turkey=new WildTurkey();

            Duck turkeyDuck=new TurkeyAdapter(turkey);

            turkeyDuck.fly();
            turkeyDuck.quack();

            #endregion
            Console.ReadKey();
        }

适配器使用过程

  • 1.客户通过调用目标适配器的方法对适配器发出请求
  • 2.适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口。
  • 3.客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。

客户和被适配器是解耦的,一个不知道另一个

定义

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。
适配器模式有良好的OO设计原则:使用对象组合,以修改的接口包装被适配者。这样还有一个优点,被适配的任何子类都可以搭配着适配器使用。

posted on   Mr.Tan&  阅读(162)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示