重构读书笔记-11_11-Replace_Inheritance_with_Delegation

重构第十一章

11.Replace Inheritance with Delegation(以委托取代继承)

某个subclass只使用superclass接口中的一部分,或是根本不需要继承而来的数据。在subclass中新建一个值域用以保存superclass;调整subclass函数,令它改而委托superclass;然后去掉两者之间的继承关系。

Example:

class MyStack extends Vector {
    public void push(Object element) {
        insertElementAt(element,0);
    }
    public Object pop() {
        Object result = firstElement();
        removeElementAt(0);
        return result;
    }
}

End:

class MyStack {
    public void push(Object element) {
        _vecoter.insertElementAt(element,0);
    }
    public Object pop() {
        Object result = _vecoter.firstElement();
        _vecoter.removeElementAt(0);
        return result;
    }
    public int size(){
        return _vecoter.size();
    }
    public boolean isEmpty() {
        return _vecoter.isEmpty();
    }

    private Vecoter _vecoter;
}

Conclusion:

继承是[避免重复行为]的一个强大工具。但是有的时候它并不是你需要的,会导致subclass只使用了superclass功能的一部分。

如果以委托取代继承,你可以更加清楚的表明:你只需要委托类的一部分功能。这样的成本是需要额外写出请托函数,但这新函数比较简单。

注意

重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!

你可能感兴趣的:(重构读书笔记-11_11-Replace_Inheritance_with_Delegation)