一、方法服用的两种最常用的技术就是类继承和对象组合。
1.继承复用:子类中可以将父类的方法当作自己的方法使用(非private修饰的)
优点:
--可以通过重写父类方法,来修改或扩展父类方法
缺点:
--继承来的方法在编译期就已经确定,无法在运行期间改变从父类继承来的方法的行为
--子类和父类是强耦合关系,也就是说,父类改变,必然导致子类改变
--继承复用也成为“白盒服用”,也就是说父类的内部细节对于子类而言是可见的。
2.组合复用:类(A)的组成成员中有其他的若干对象(B、C), A Has-B,这样A就可以委托对象B调用其方法,即A以组合的方式复用对象B的方法。
优点:
--组合复用也成为“黑盒复用”,因为当前对象只能委托所包含的对象调用其方法,这样一来,当前对象所包含的对象方法的细节对当前对象是不可见的。
--对象与所包含对象为弱耦合关系,因为,如果修改当前对象所包含对象类的代码,不必修改当前对象的代码。
--当前对象可以在运行时动态指定所包含的对象,例如,假设Com是一个接口,该接口中有一个computer()方法,那么下列Computer类的对象可以在运行是动态指定所包含的对象,即运行期间,Computer类的实例可以调用setCom(Com com)方法将其中的com变量存放任何实现Com接口对象的引用。
public class Computer
{
Com com;
public void setCom(Com com){
this.com=com;
}
public void f(){
com.computer();
}
}
缺点:
--容易导致系统中的对象过多
--为了组合多个对象,对于接口的定义必须仔细
二、多用组合,少用继承
为了降低系统的耦合性,要多用组合,少用继承。
装饰模式、策略模式、中介者模式中会对于两种复用方式的优缺点有多体现。敬待。