如何理解“多用合成/聚合关系,少用继承”?
我在看《JAVA与模式》,看到了开闭原则一章,其中提到,“多用合成/聚合关系,少用继承”,我一时不能理解。
有能举例说明的吗?分别分析同一个实体,两种不同的设计间的区别。
问题点数:100、回复次数:4Top
1 楼buzhiming99(不知名)回复于 2003-11-04 10:14:58 得分 25
合成/聚合更有灵活性,看看书后面介绍的模式,很多都利用合成来提高灵活度Top
2 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2003-11-04 11:35:10 得分 25
继承是一种类与类之间的静态和持续关系。
一旦一个类从另一个类继承,它们之间的关系就不能改变。这样就没法在运行过程中改变这种关系,更要命的是,如果你要修改超类,那么所有用到其子类的地方都要作出修改,并重新测试Top
3 楼leyt(思维机器)回复于 2003-11-04 16:32:20 得分 20
关注Top
4 楼plainsong(短歌)()回复于 2003-11-04 17:29:41 得分 30
继承有两种目的,一种是衍生类继承基类的接口并重新实现(override),这样可以用操作基类的代码操作衍生类,也就是常说的IS-A的概念。另一种是衍生类的实现要用到基类的实现,继承是为了利用基类的代码而不是为了体现IS-A,这时用继承不如用组合更好。
比如一个矩阵的实现:
class Matrix: public std::vector<vector<double> >;
其实说Matrix 是一个vector并不确切,这里主要是为了复用vector的功能,不如改为
class Matrix
{
std::vector<vector<double> > data;
...
};
更好。Top




