Скрытие класса в C # с использованием интерфейса - PullRequest
1 голос
/ 21 сентября 2019

У меня есть класс с именем ResponseBuffer, который читает и записывает в буфер.Я хочу скрыть этот класс и предоставить только API Read() и Write() другим классам.

Я планирую использовать для этой цели interface.Я написал следующий пример кода MWE.

//*************************************************
//-----Response Buffer (Should be HIDDEN class)
//*************************************************
interface IResponseBuffer
{
    void ReadResponseBuffer();
    void WriteResponseBuffer(string message);
}
class ResponseBuffer : IResponseBuffer //HIDE THIS CLASS
{
    private BlockingCollection<string> ResponseBuffer = new BlockingCollection<string>();

    public void ReadResponseBuffer()
    { }
    public void WriteResponseBuffer(string message)
    { 
        Console.WriteLine(message);
    }
}


//*************************************************
//-----Communication Channel Class - This class needs to use the Response Buffer APIs
//*************************************************
class CommunicationChannel
{
    IResponseBuffer _objResposeBuffer;

    public void SetResponseBufferObject(IResponseBuffer objResponseBuffer)
    {
        this._objResposeBuffer = objResponseBuffer;
    }

    public void StartCommunication()
    {
        _objResposeBuffer .WriteResponseBuffer("Hello");
    }
}

//*************************************************
//-----Main Entry Point for the Program
//*************************************************
class MainWindow_EntryPoint
{        
    ResponseBuffer _objResponseBuffer = new ResponseBuffer();

    CommunicationChannel _objComChannel = new CommunicationChannel();

    //Main enter Constructor
    public MainWindow_EntryPoint()
    {            
        _objComChannel.SetResponseBufferObject(_objResponseBuffer);
        _objComChannel.StartCommunication();
    }
}

Объяснение кода: В приведенном выше коде у меня есть класс ResponseBuffer, который реализует методы Read и Write для изменения очереди буфера.Я хочу скрыть этот класс, используя интерфейс IReposnseBuffer, который предоставляет API-интерфейсы ReadReposneBuffer и WriteReposnseBuffer.

ПРОБЛЕМА: Хотя класс ComminicationChannel не имеет знанийЧто касается класса ReponseBuffer, я должен создать объект класса ReponseBuffer в Main.

Как я могу использовать методы класса ReposeBuffer без непосредственного создания какого-либо из его объектов?

1 Ответ

3 голосов
/ 21 сентября 2019

Создайте фабричный класс, который возвращает экземпляры IResponseBuffer.Ваш фабричный класс может затем вернуть вашу реализацию этого интерфейса («скрытый» класс).Тогда вашему вызывающему коду нужно знать только интерфейс и фабрику, а ваша фабрика может вернуть все, что реализует этот интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...