欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#適配器模式的使用

 更新時間:2022年06月14日 09:52:40   作者:RyzenAdorer  
本文主要介紹了C#適配器模式的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

我昨天做了個夢,我夢見我在一條路走,走的時候經(jīng)過一個房間,里面關(guān)著一條邊牧和雞和豬,后來我醒了,我知道那只邊牧就是小葉子(哈仔十一的邊牧),小葉子具備牧羊和牧雞的技能,因此,假如我想把一只邊牧或者一只狗變成小葉子那樣,那么首先就得讓其賦予牧雞的本事,而十一(哈仔十一的哈士奇)則具備賣萌的技能

適配器模式

我們先定義一些代碼

   internal interface IDog
    {
        public void Eat();

        public void Bark();
    }


    /// <summary>
    /// 哈士奇
    /// </summary>
    internal interface IHuskyDog:IDog
    {
        /// <summary>
        /// 破壞、拆家
        /// </summary>
        public void Demolition();
    }

    /// <summary>
    /// 牧羊犬
    /// </summary>
    internal interface IShepherdDog:IDog
    {
        /// <summary>
        /// 牧羊
        /// </summary>
        public void Shepherd();
    }



    /// <summary>
    /// 小葉子、小椰汁
    /// </summary>
    internal class XiaoYezi : IShepherdDog
    {
        public void Bark()
        {
            Console.WriteLine($"I Am {nameof(XiaoYezi)} 汪 汪 汪 !!!!!");
        }

        public void Eat()
        {
            Console.WriteLine($"I Am {nameof(XiaoYezi)} 好吃 !!!!!");
        }

        /// <summary>
        /// 牧羊
        /// </summary>
        public void Shepherd()
        {
            Console.WriteLine($"I Am {nameof(XiaoYezi)}, 我在牧羊 !!!!!");
        }
    }


    /// <summary>
    /// 十一
    /// </summary>
    internal class ShiYi : IHuskyDog
    {
        public void Bark()
        {
            Console.WriteLine($"I Am {nameof(ShiYi)} 汪 汪 汪 !!!!!");
        }

        public void Demolition()
        {
            Console.WriteLine($"I Am {nameof(ShiYi)} ,拆家啦 !!!!!");
        }

        public void Eat()
        {
            Console.WriteLine($"I Am {nameof(ShiYi)} 好吃得停不下來 !!!!!");
        }
    }

那么,用代碼怎么寫呢?或許你會定義一個變?nèi)~子的接口,有個方法叫HerdingChicken ,讓其實現(xiàn)牧雞的技能就行,但是實際上這里有兩個主要問題:

  • 葉子本身是一個狗,如果其他人實現(xiàn)了這個接口,他能變?nèi)~子?是不是前提他是狗
  • 假如葉子不單單只是牧雞,她會牧鵝、豬、牧自己?還得多接口,或者在變?nèi)~子的接口加方法給其實現(xiàn)

這時候適配器模式就是可以適應(yīng)這種情況:

 internal class XiaoYeziAdapter : IShepherdDog
    {
        public IDog Dog { get; set; }

        public XiaoYeziAdapter(IDog dog)
        {
            Dog = dog;
        }

        public void Bark()
        {
            Dog.Bark();
        }

        public void Eat()
        {
            Dog.Eat();
        }

        public void Shepherd()
        {
            if (Dog is IShepherdDog shepherdDog)
            {
                shepherdDog.Shepherd();
            }
        }

        /// <summary>
        /// 牧雞
        /// </summary>
        public void HerdingChicken()
        {
            Console.WriteLine($"{Dog.GetType().Name} is Herding Chicken");
        }
    }

代碼如下:

var xiaoYezi = new XiaoYezi();
var xiaoYeziAdapter = new XiaoYeziAdapter(xiaoYezi);
xiaoYeziAdapter.Bark();
xiaoYeziAdapter.Eat();
xiaoYeziAdapter.HerdingChicken();

Console.WriteLine("---------------- \n");

var shiYi = new ShiYi();
xiaoYeziAdapter = new XiaoYeziAdapter(shiYi);
xiaoYeziAdapter.Bark();
xiaoYeziAdapter.Eat();
xiaoYeziAdapter.HerdingChicken();

輸出:

I Am XiaoYezi 汪 汪 汪 !!!!!
I Am XiaoYezi 好吃 !!!!!
XiaoYezi 在牧雞
----------------

I Am ShiYi 汪 汪 汪 !!!!!
I Am ShiYi 好吃得停不下來 !!!!!
ShiYi 在牧雞

可以看到,十一用了小葉子適配器,也具備了牧雞的功能

那么反過來,葉子變十一呢?那就定義一個十一適配器唄

 internal class ShiYiAdapter : IHuskyDog
    {
        public IDog Dog { get; set; }

        public ShiYiAdapter(IDog dog)
        {
            Dog=dog;
        }

        /// <summary>
        /// 吠
        /// </summary>
        /// <exception cref="NotImplementedException"></exception>
        public void Bark()
        {
            Dog.Bark();
        }

        /// <summary>
        /// 拆家
        /// </summary>
        /// <exception cref="NotImplementedException"></exception>
        public void Demolition()
        {
            if (Dog is IHuskyDog huskyDog)
            {
                huskyDog.Demolition();
            }
        }

        /// <summary>
        /// 吃
        /// </summary>
        /// <exception cref="NotImplementedException"></exception>
        public void Eat()
        {
            Dog.Eat();
        }

        /// <summary>
        /// 賣萌
        /// </summary>
        public void ActingCute()
        {
            Console.WriteLine($"{Dog.GetType().Name} 賣萌啦??!");
        }
    }

代碼如下:

var xiaoYezi = new XiaoYezi();
var shiYiAdapter = new ShiYiAdapter(xiaoYezi);
shiYiAdapter.Bark();
shiYiAdapter.ActingCute();
shiYiAdapter.Demolition();

Console.WriteLine("---------------- \n");

var shiYi = new ShiYi();
shiYiAdapter = new ShiYiAdapter(shiYi);
shiYiAdapter.Bark();
shiYiAdapter.ActingCute();
shiYiAdapter.Demolition();

輸出:

I Am XiaoYezi 汪 汪 汪 !!!!!
XiaoYezi 賣萌啦!!
----------------

I Am ShiYi 汪 汪 汪 !!!!!
ShiYi 賣萌啦?。?br />I Am ShiYi ,拆家啦 !!!!!

看,小葉子具備賣萌的技能了,而且由于拆家是哈士奇的技能,因此小葉子拆家沒拆到,實際上,或者賣萌和牧雞只是哈仔十一(大哈)家的特色,那么是不是可以定義一個大哈家的適配器

    /// <summary>
    /// 哈仔十一家的狗適配器
    /// </summary>
    internal class DaHaFamilyDogAdapter
    {
        public IDog Dog { get; set; }

        public DaHaFamilyDogAdapter(IDog dog)
        {
            Dog = dog;
        }

        /// <summary>
        /// 牧雞
        /// </summary>
        public void HerdingChicken()
        {
            Console.WriteLine($"{Dog.GetType().Name} 在牧雞");
        }

        /// <summary>
        /// 賣萌
        /// </summary>
        public void ActingCute()
        {
            Console.WriteLine($"{Dog.GetType().Name} 在賣萌");
        }
    }

那么

var xiaoYezi = new XiaoYezi();
var daHaFamilyDogAdapter = new DaHaFamilyDogAdapter(xiaoYezi);
daHaFamilyDogAdapter.Bark();
daHaFamilyDogAdapter.Eat();
daHaFamilyDogAdapter.HerdingChicken();
daHaFamilyDogAdapter.ActingCute();

Console.WriteLine("---------------- \n");

var shiYi = new ShiYi();
daHaFamilyDogAdapter = new DaHaFamilyDogAdapter(shiYi);
daHaFamilyDogAdapter.Bark();
daHaFamilyDogAdapter.Eat();
daHaFamilyDogAdapter.HerdingChicken();
daHaFamilyDogAdapter.ActingCute();

輸出:

I Am XiaoYezi 汪 汪 汪 !!!!!
I Am XiaoYezi 好吃 !!!!!
XiaoYezi 在牧雞
XiaoYezi 在賣萌
----------------

I Am ShiYi 汪 汪 汪 !!!!!
I Am ShiYi 好吃得停不下來 !!!!!
ShiYi 在牧雞
ShiYi 在賣萌

到此這篇關(guān)于C#適配器模式的使用的文章就介紹到這了,更多相關(guān)C#適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#?HttpClient超時重試機制詳解

    C#?HttpClient超時重試機制詳解

    超時重試的實現(xiàn)方式可以使用循環(huán)結(jié)構(gòu),在請求發(fā)起后等待一定時間,若超時未收到響應(yīng),則再次發(fā)起請求,循環(huán)次數(shù)可以根據(jù)實際情況進行設(shè)置,一般建議不超過三次,這篇文章主要介紹了C#?HttpClient超時重試,需要的朋友可以參考下
    2023-06-06
  • C# 7.0 新特性1之基于Tuple的“多”返回值方法

    C# 7.0 新特性1之基于Tuple的“多”返回值方法

    這篇文章主要為大家詳細介紹了C# 7.0 新特性1之基于Tuple的“多”返回值方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 詳解C#中的string與String

    詳解C#中的string與String

    本篇文章主要對jC#中的小寫string與大寫String進行詳細介紹,相信對大家學(xué)習(xí)會有很好的幫助,需要的朋友一起來看下吧
    2016-12-12
  • C#實現(xiàn)圖片放大功能的按照像素放大圖像方法

    C#實現(xiàn)圖片放大功能的按照像素放大圖像方法

    這篇文章主要介紹了C#實現(xiàn)圖片放大功能的按照像素放大圖像方法,功能非常實用,需要的朋友可以參考下
    2014-07-07
  • 最新評論