技术开发 频道

面向对象之代码复用规则

    7、 类层次的最高层应该是抽象类。

    在许多情况下,提供一个抽象基类有利做特性化扩展。由于在抽象基类中,大部分的功能和行为已经定义好,使我们更容易理解接口设计者的意图是什么。

    由于JAVA不允许"多继承",从一个抽象基类继承,就无法再从其它基类继承了。所以,提供一个抽象接口(interface)是个好主意,一个类可以实现多个接口,从而模拟实现了"多继承",为类的设计提供了更大的灵活性。

    8、 尽量减少对变量的直接访问。

    对数据的封装原则应该规范化,不要把一个类的属性暴露给其它类,而是应该通过访问方法去保护他们,这有利于避免产生波纹效应。如果某个属性的名字改变,你只需要修改它的访问方法,而不是修改所有相关的代码。

    9、 子类应该特性化,完成特殊功能。

    如果一个子类只是使一个组件变成组件管理器,而不是实现接口功能,或者,重载某个功能,那么,就应该使用一个外部的容器类,而不是创建一个子类。

    建议:类层次结构图,不要太深;

    例如:下面的接口定义了组件的功能:发送消息;类Transceiver实现了该接口;而其子类Pool只是管理多个Transceiver对象,而没有提供自己的接口实现。建议使用组合方式,而不是继承!

    public interface ITransceiver{

    public abstract send(String msg);

    }

    public class Transceiver implements ITransceiver {

    public send(String msg){

    System.out.println(msg);

    }

    }

    //使用继承方式的实现

    public class Pool extends Transceiver{

    private List pool = new Vector();

    public void add(Transceiver aTransceiver){

    pool.add(aTransceiver);

    }

    public Transceiver get(int index){

    pool.get(index);

    }

    }

    //使用组合方式的实现

    public class Pool {

    private List pool = new Vector();

    public void add(Transceiver aTransceiver){

    pool.add(aTransceiver);

    }

    public Transceiver get(int index){

    pool.get(index);

    }

    }

    10、 拆分过大的类。

    如果一个类有太多的方法(超过50个),那么它可能要做的工作太多,我们应该试着将它的功能拆分到不同的类中,类似于规则四。

    11、 作用截然不同的对象应该拆分。

    在构建的过程中,你有时会遇到这样的问题:对同样的数据,有不同的视图。某些属性描述的是数据结构怎样生成,而某些属性描述的是数据结构本身。最好将这两个视图拆分到不同的类中,从类名上就可以区分出不同视图的作用。类的域、方法也应该有同样的考虑!

0
相关文章