最近为 iPhone 做了一些开发,我开始注意到一个有趣的设计模式,在 iPhone SDK 中使用了很多,关于对象可变性。
似乎典型的方法是定义一个不可变的类NSFoo
,然后从中派生一个可变的后代NSMutableFoo
。通常,NSFoo
该类定义了数据成员、getter 和只读操作,派生的NSMutableFoo
添加了 setter 和 mutating 操作。
由于对 C++ 更加熟悉,我不禁注意到这似乎与我在 C++ 中编写相同代码时所做的完全相反。虽然您当然可以采用这种方法,但在我看来,更简洁的方法是创建一个Foo
类,将 getter 和只读操作标记为const
函数,并在同一个类中实现可变操作和 setter。然后你会得到一个可变类,但是 typesFoo const*
等Foo const&
都是不可变的等价物。
我想我的问题是,我对这种情况的看法有意义吗?我理解为什么 Objective-C 会做不同的事情,但是我错过了 C++ 中的二分类方法有什么优势吗?还是我完全错过了重点?
不是一个过于严肃的问题——更多的是出于我自己的好奇心。