十:合成/聚合复用原则

合成/聚合复用原则经常又叫做合成复用原则,就在在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的,这个设计原则有另一个更加简短的表述,要尽量使用合成/聚合,尽量不要使用继承.

我们通常不在新的对象里面拥有需要的对象,而应当最好拥有对象所在的工厂,这样又把工厂模式应用过来,这是我的灵感..^-^

一:复用的基本类型

A:合成/聚合复用,由于合成或聚合可以将已有的对象纳入到新对象中,使之成为新对象的一部分,因此新的对象可以调用已有对象的功能,这样做有下面好处:
(1)新对象存取成分对象的唯一方法是通过成分对象的接口
(2)这种复用可以在运行时间内动态进行,新对象可以动态地引用与成分对象类型相同的对象
(3)这种复用是黑箱复用,因为成分对象的
.......
B:通过继承达到复用的目的
继承的优点是修改或扩展继承而来的实现较为容易,它有如下缺点:
(1)因为继承超类的实现细节暴露给子类,所以继承破坏了封装性,因此又称为"白箱"复用
(2)当修改基类时,使得我们不得不修改子类.
(3)从超类继承而来的实现是静态的,不可能在运行时间内发生改变,因此没有足够的灵活性.

二:区分"Has-A"与"Is-A"
"Has-A"是严格的分类学意义上的定义,意思是一个类是另一个类的"一种",而"Has-A"则不同,它表示某一个角色具有某一项责任。
有一个人类H,请看下面一个例子,假如我们再设计三个类:雇员类E,经理类M,学生类S,如果我们把这三个类都继承H的话会出现什么问题?实际上雇员,经理,学生分别描述了一种角色,而人可以同时有不同的角色。比如一个人既然是经理就必然是雇员,而此人可能同时参加了MBA课程,从而也是一个学生,使用继承来实现角色,则只能使每一个人具有Has-A角色,而且继承是静态的,这会使得一个人在成为雇员身份后,就永远为雇员,不能称为经理或学生,这显然是不合理的。
纠正:我们应当在加一个角色类R,人通过R可以得到不同的角色。
这就是说,当一个类是另一个类的角色时,不应当使用继承来描述这种关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值