我有一些课程 - 让我们称之为MyMutableClass
,实现MutableInterface
。
class MutableInterface {
public:
void setMyPreciousData(int value);
int getMyPreciousData() const;
.... //and so on
};
但是代码的很大一部分,不应该改变这个类实例的状态,但它需要具有读访问权。
如何以最礼貌的方式做到这一点?我应该创建一个额外的ImmutableInterfaces
,仅使用getter并通过MutableInterface
继承它吗?然后我可以选择将哪一个传递给代码的另一部分。
第二个选项是创建另一个类,该对象将封装MutableInterface实现并仅提供对其方法子集的访问。那更好吗?
是否有一些众所周知的模式,我不知道?
答案 0 :(得分:2)
这不是你想听到的,但我认为在这种情况下说的很重要。
继承描述了'是一种'接口。派生的东西'是一种'基础的东西。
const的东西不是'一种'可变的东西。这是不可改变的事情。
可变的东西不是'一种'不可改变的东西。这是一件恰好可变的事情。
可变性是事物的属性,而不是专业化。
因此,继承是错误的模型,这就是为什么在c ++中,constness是属性,而不是接口。
如果你真的必须隐藏有时事物是可变的这一事实(人们想知道为什么),那么正如评论中所提到的,你可能想要某种代理视图类,例如: / p>
// 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;
};