美文网首页
重构读书笔记-11_11-Replace_Inheritance

重构读书笔记-11_11-Replace_Inheritance

作者: MR_Model | 来源:发表于2019-08-08 09:21 被阅读0次

    重构第十一章

    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

          本文链接:https://www.haomeiwen.com/subject/azrtjctx.html