成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 設(shè)計(jì)模式:適配器模式(Adapter Pattern)

開(kāi)發(fā) 前端
想象一下,我們有一個(gè)IUSPowerSource美國(guó)電源接口,它提供110V電壓,而我們有一個(gè)設(shè)備是IEUPowerDevice歐洲設(shè)備,它需要220V電壓。為了讓這個(gè)設(shè)備在美國(guó)使用,我們需要一個(gè)適配器。

適配器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許不兼容的接口之間能夠相互合作。這種模式涉及到一個(gè)單獨(dú)的類(lèi),它負(fù)責(zé)加入獨(dú)立的或不兼容的接口功能。簡(jiǎn)單來(lái)說(shuō),適配器模式就是一個(gè)中間件,它使得原本由于接口不兼容而不能一起工作的類(lèi)可以一起工作。

應(yīng)用場(chǎng)景

適配器模式通常應(yīng)用于以下情況:

  • 當(dāng)你希望使用某個(gè)類(lèi),但是它的接口與其他代碼不兼容時(shí)。
  • 當(dāng)你想創(chuàng)建一個(gè)可重用的類(lèi),該類(lèi)可以與未知的或未來(lái)的類(lèi)(即那些接口可能不兼容的類(lèi))協(xié)同工作。
  • 當(dāng)你需要使用幾個(gè)現(xiàn)有的子類(lèi),但是子類(lèi)化每個(gè)類(lèi)以適配它們的接口會(huì)導(dǎo)致代碼可復(fù)用性降低時(shí)。

優(yōu)勢(shì)

  • 提高類(lèi)的復(fù)用性:通過(guò)適配器,可以使原本因接口不兼容而不能一起工作的類(lèi)可以一起工作。
  • 增加了類(lèi)的透明性和靈活性:隱藏了具體實(shí)現(xiàn),用戶只需要關(guān)注接口。
  • 系統(tǒng)的可擴(kuò)展性較好:在實(shí)現(xiàn)新的適配器時(shí),不必修改原有代碼,符合開(kāi)閉原則。

劣勢(shì)

  • 過(guò)多的使用適配器會(huì)使系統(tǒng)非常凌亂:不僅會(huì)產(chǎn)生很多小類(lèi),而且在維護(hù)時(shí)可能會(huì)造成困難。
  • 不易于理解:尤其是涉及到多重適配時(shí),適配器的引入可能會(huì)讓系統(tǒng)的復(fù)雜性大大增加。

例子1:電源適配器

想象一下,我們有一個(gè)IUSPowerSource美國(guó)電源接口,它提供110V電壓,而我們有一個(gè)設(shè)備是IEUPowerDevice歐洲設(shè)備,它需要220V電壓。為了讓這個(gè)設(shè)備在美國(guó)使用,我們需要一個(gè)適配器。

首先,我們定義兩個(gè)接口:

public interface IUSPowerSource
{
    int Provide110V();
}


public interface IEUPowerDevice
{
    void PowerOn(int voltage);
}

兩個(gè)類(lèi):

public class EUPowerDevice : IEUPowerDevice
{
    public void PowerOn(int voltage)
    {
        MessageBox.Show(voltage.ToString());
    }
}


public class USPowerSource : IUSPowerSource
{
    public int Provide110V()
    {
        return 110;
    }
}

然后,我們實(shí)現(xiàn)一個(gè)適配器:

public class PowerAdapter: IUSPowerSource
{
    private IEUPowerDevice _device;


    public PowerAdapter(IEUPowerDevice device)
    {
        _device = device;
    }


    public int Provide110V()
    {
        // 適配器邏輯,將110V轉(zhuǎn)換為220V
        int voltage110 = 110;
        int voltage220 = Convert110VTo220V(voltage110);
        _device.PowerOn(voltage220);
        return voltage110;
    }


    private int Convert110VTo220V(int voltage110)
    {
        // 假設(shè)這里有復(fù)雜的轉(zhuǎn)換邏輯
        return voltage110 * 2;
    }


}

最后,使用適配器讓歐洲設(shè)備在美國(guó)電源上工作:

private void btnConvert_Click(object sender, EventArgs e)
{
    IEUPowerDevice europeanDevice = new EUPowerDevice();
    IUSPowerSource adapter = new PowerAdapter(europeanDevice);
    var ret = adapter.Provide110V(); // 設(shè)備可以在110V電源上工作了 
}

圖片圖片

例子2:日志系統(tǒng)適配器

假設(shè)你有一個(gè)老舊的日志系統(tǒng),它只支持輸出日志到控制臺(tái),但是現(xiàn)在需要將日志輸出到文件中。我們可以通過(guò)適配器模式來(lái)實(shí)現(xiàn)這一需求,而不是修改原有的日志系統(tǒng)。

首先,定義日志接口:

public interface ILogger
{
    void Log(string message);
}

舊的日志系統(tǒng)實(shí)現(xiàn):

public class ConsoleLogger : ILogger
{
    public void Log(string message)
    {
        Console.WriteLine("Log to console: " + message);
    }
}

現(xiàn)在,我們需要一個(gè)適配器來(lái)實(shí)現(xiàn)文件日志功能:

public class FileLoggerAdapter : ILogger
{
    private FileLogger _fileLogger;


    public FileLoggerAdapter(FileLogger fileLogger)
    {
        _fileLogger = fileLogger;
    }


    public void Log(string message)
    {
        _fileLogger.WriteToFile(message);
    }
}


public class FileLogger
{
    public void WriteToFile(string message)
    {
        // 實(shí)現(xiàn)將消息寫(xiě)入文件的邏輯
    }
}

使用適配器輸出日志到文件:

ILogger logger = new FileLoggerAdapter(new FileLogger());
logger.Log("This is a log message."); // 現(xiàn)在日志被寫(xiě)入到文件中


責(zé)任編輯:武曉燕 來(lái)源: 技術(shù)老小子
相關(guān)推薦

2013-02-26 10:55:47

C#適配器設(shè)計(jì)模式

2020-10-25 08:56:21

適配器模式

2012-08-02 10:46:34

JavaAdapter模式

2012-05-16 17:22:11

Java設(shè)計(jì)模式

2021-02-18 08:39:28

設(shè)計(jì)模式場(chǎng)景

2013-11-26 16:39:21

Android設(shè)計(jì)模式

2022-02-13 23:33:24

設(shè)計(jì)模式Java

2022-02-18 17:21:29

適配器模式客戶端

2024-02-22 12:13:49

適配器模式代碼

2012-04-12 09:33:02

JavaScript

2014-07-17 10:55:10

Win8.1應(yīng)用開(kāi)發(fā)適配器模式

2024-04-10 12:27:43

Python設(shè)計(jì)模式開(kāi)發(fā)

2022-12-12 09:20:59

適配器模式接口

2021-08-16 17:15:19

設(shè)計(jì)模式Android適配器模式

2009-11-18 18:08:20

PHP適配器模式

2009-04-29 09:06:18

C#設(shè)計(jì)模式Adapter

2022-05-29 22:55:00

適配器設(shè)計(jì)模式

2023-08-15 11:07:37

適配器模式TypeScript

2021-02-16 08:16:09

適配器模式MybatisJava

2014-12-17 09:57:01

AndroidAdapteViewHolder
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美日韩大片 | 亚洲欧美一区二区三区在线 | 高清免费av | 国产色在线 | 日韩一区二区在线视频 | 国产综合区 | 男女在线免费观看 | av免费入口 | 一区二区三区免费 | 日韩精品免费在线观看 | 999免费视频| 在线欧美一区 | 欧美一区二区三区四区视频 | 亚洲成人综合社区 | 天天操夜夜操免费视频 | 欧美在线视频一区二区 | 91精品久久久久久久99 | 美女视频h| 亚洲电影在线播放 | 午夜爱爱网| 国产一区二区三区免费视频 | 韩日一区二区三区 | 91av在线免费观看 | 欧美一区二区三区在线看 | 一区二区久久精品 | 精品美女在线观看 | 99热.com| 九九亚洲| 欧美极品少妇xxxxⅹ免费视频 | 日本免费在线 | 国产一区二区三区在线 | 麻豆av网站| 全部免费毛片在线播放网站 | 高清国产一区二区 | 久久久久av | 美女张开腿露出尿口 | 免费视频一区二区 | 亚洲一区二区三区四区五区中文 | 在线精品一区 | 天天爽一爽| 日本黄色短片 |