我有一些类-让我们称之为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;
};