java:代理模式中实现接口算不算污染?前辈指导下

在代理模式中(纯手动,不用InvocationHandler)
为了生成代理对象,一般用原对象类抽象出接口,然后原对象类和代理对象类都实现这个接口,这样,可以适用原对象的地方也可以使用代理对象了,然后再在代理对象中加入我们新增的验证之类的功能,大功告成!

但是我很好奇 这样对原对象来说算不算污染?
因为对于Struts和Struts2或者EJB和Hibernate 就因为多继承了个类或者多实现了个接口,书上就管这个叫做代码污染,或者说影响了扩展性

那这样实现的代理模式是不是也是污染了代码呢?还是说为了代码的可扩展性 这些牺牲是微不足道的呢?小弟才疏学浅 叙述疏漏望指正:)

3个回答

添加接口是为了代码的扩展性,这种污染不算是污染,污染是要实现某项功能必须粘合一堆不理解的api,就像struts1中的actionform,使用者不理解为什么要写个servlet就必须用这个api,而这个接口你是理解的,是一个扩展接口。
如果spring每次配置一个bean都必须让那个bean继承某个BaseBean,那就是一种污染。污染更多的来自与继承,而非接口与组合。

我觉得只要每个接口的粒度合适(方法个数控制在一定范围之内),具体类所实现的接口个数适当(取决于业务的复杂程度和具体类的职责),就不存在污染不污染,设计本身就是寻找一种平衡,简单明了就好。

首先,你得明白什么是接口污染的定义,那就是在一个实现类中,实现了与业务无关的方法,而此方法仅仅是一个必要实现,为了不报错嘛,这个对于系统来说是非常危险的事,假如用户不小心使用了此方法,带来的后果是不可预测的,对于更小粒度的实现来说,为了不造成接口污染,在6大设计原则里面有明确的接口分离原则,目的就是为了避免接口污染,你可以再考虑下你的模式,思考下是否有接口污染的冲突存在,谢谢!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐