类文件的单一接口原则

      面向对象有一个重要的原则:单一职责原则。即一个类应该尽量只承担一种职责。

      前几天做了个小程序,把多个类定义在了一个文件中。类和类之间有依赖的关系,还共用几个变量。同时,三个类都有被外界调用的可能。昨晚想来想去觉得不妥。最终得一结论:类文件应该符合单一接口(类)。

      对此做如下说明:

      一.所谓单一接口是指类的文件对外只有一个发言人。即只有一个类是被外界调用的,在外界看来这个文件中似乎只有这么一个类。

      二.该对外接口同样得符合单一职责原则。不能是个万能的上帝类。

      三.文件内部其他类或结构只能被封装在内部,供内部使用。如果确实想和其他文件共有类和结构,请把它们解耦出来,形成单个文件。

      这样才能真正的把文件与文件之间解耦,更清晰地看出对象的依赖关系。

      举个例子,一个文件F中含有A和B两个对外接口。我们不知道A和B之间有没有关系,因为一个文件对我们来说就是一个封装好的组件。此时如果我要用到A,那我们不得不把庞大的F加载进来,B很可能就是一个冗余的接口。要修改B,那我们还必须对整个F文件进行修改。A和B”耦合“了(不管他们是否真的耦合,至少外界看来是这样)。

 

2010.4.26补充:

      以上所说如果A和B放在同一文件里说明他们之间”耦合“了。这里所说的耦合是从F文件使用者的角度来说。因为使用者并不关心内部结构,对他来说这个封装好的文件就是一个整体。他们内部可能是松耦合的A和B一点关系也没有。可使用者不知道啊,这样F文件的原创者修改了F文件中的B,那他就不得不对没一个使用F文件的人发布新的文件,让他们重新编译F文件。

      再举一例说明:

     本来甲建了一文件F,包含A和B。乙拿过来用了(甲也不知道乙到底是用了A还是B,只知道用了F文件)。后来甲修改了B,B又引用到了其他文件,把F发给了乙。那么乙不得不也把这些引用到的文件全部加载进来以保证编译通过,这都是不必要编译麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值