我有一些类-让我们称之为MyMutableClass,它实现了MutableInterface

class MutableInterface {
  public:
    void setMyPreciousData(int value);
    int getMyPreciousData() const;
    .... //and so on
};

但是,有很大一部分代码,不应更改此类实例的状态,但需要具有读取访问权限。

如何以最客气的方式做到这一点?我是否应该使用getters创建一个附加的ImmutableInterfaces并由MutableInterface继承它?然后,我可以选择将哪一个传递给另一部分代码。

第二种选择是创建另一个类,该对象将封装MutableInterface实现并仅提供对其方法子集的访问。那个更好吗?

有一些我不知道的知名模式吗?

最佳答案

这不是您想听到的,但我认为在这种情况下要说的很重要。

继承描述了“是一种”接口(interface)。派生事物“是一种”基本事物。

const东西不是“一种”可变的东西。这是一成不变的事情。

可变的东西不是“一种”不变的东西。这是一件偶然的事情。

可变性是事物的属性,而不是专长。

因此,继承是错误的模型,这就是为什么在c++中,常数是属性而不是接口(interface)。

如果您真的必须隐藏有时事物是易变的事实(有人想知道为什么),那么如注释中所述,您可能想要某种代理 View 类,例如:

// this is the actual thing
struct the_thing
{
    void change_me();
    int see_me() const;
};

// and this is the proxy

struct read_only_thing_view
{
    int see_me() const { return _reference.see_me(); }

    the_thing& _referent;
};

10-06 14:28