You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让特定Communicator实例仅暴露对应读写方法

解决方案:通过接口分离实现读写方法隔离

核心思路是借助接口分离原则,将读、写操作拆分为独立接口,让底层的Communicator同时实现两个接口,再通过不同接口类型对外暴露实例,从而达到读属性仅显式Read方法、写属性仅显式Write方法的目的。

1. 定义读、写专属接口

创建两个单一职责的接口,分别封装读操作和写操作,同时保留公共属性的访问:

public interface ICardReader
{
    int Port { get; }
    int Bit { get; }
    long Read();
}

public interface ICardWriter
{
    int Port { get; }
    int Bit { get; }
    long Write(bool[] values);
}

2. 修改Communicator实现接口

让Communicator同时实现上述两个接口,保留原有业务逻辑:

public sealed class Communicator : ICardReader, ICardWriter
{
    public int Port { get; private set; }
    public int Bit { get; private set; }

    public Communicator(int port, int bit)
    {
        Port = port;
        Bit = bit;
    }

    public long Read()
    {
        // 替换为实际读卡片逻辑
        return 0;
    }

    public long Write(bool[] values)
    {
        // 替换为实际写卡片逻辑
        return 0;
    }
}

3. 调整ReadWrite类的属性返回类型

将读属性的返回类型改为ICardReader,写属性改为ICardWriter,外部调用时就只能看到对应接口的方法:

public sealed class ReadWrite
{
    public ICardReader PortRead1 => new Communicator(0, 2);
    public ICardReader PortRead2 => new Communicator(3, 5);
    public ICardReader PortRead3 => new Communicator(6, 7);

    public ICardWriter PortWrite1 => new Communicator(1, 5);
    public ICardWriter PortWrite2 => new Communicator(1, 5);
    public ICardWriter PortWrite3 => new Communicator(1, 5);
}

可选优化:限制Communicator的直接实例化

如果不想让外部代码直接创建Communicator实例,可以将其构造函数改为internal,仅允许同一程序集内的代码(比如ReadWrite类)创建:

public sealed class Communicator : ICardReader, ICardWriter
{
    public int Port { get; private set; }
    public int Bit { get; private set; }

    // 改为internal构造,禁止外部直接实例化
    internal Communicator(int port, int bit)
    {
        Port = port;
        Bit = bit;
    }

    // 读、写方法保持不变
}

通过这套实现,读属性的实例只能调用Read()方法和访问公共属性,写属性的实例只能调用Write()方法和访问公共属性,同时底层完全复用Communicator的逻辑。

内容的提问来源于stack exchange,提问作者Yaron Binder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:25:03