论坛首页 Java企业应用论坛

如何减少子类对超类的依赖——一个设计问题

浏览 11693 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-05  
如果lz的意思就是要在子类增强一下父类方法,可以用楼上的AOP方法. 如果是想每个子类都用单独的逻辑,那还是不要用继承算了
0 请登录后投票
   发表时间:2008-04-05  
我觉得还是尽量少用继承,多用组合或者聚合,毕竟继承的耦合度太高了。。
0 请登录后投票
   发表时间:2008-04-07  
设计模式是很容易滥用的。继承也是。

楼主的问题的由来,就是滥用了继承。

0 请登录后投票
   发表时间:2008-04-07  
这是非常经典的工厂方法模式.
为何会被这么多人唾弃,
很明显是LZ应用环境描述不清.

工厂方法模式也是利用了继承,并且还实现了灵活性.
可见,继承并不是不好,关键是看你如何用.

任何东西的存在都有其道理.
问题是:你懂得利用吗?

支持楼主,你的原意是无可厚非的,很好。

只是要描述清楚了.:)
0 请登录后投票
   发表时间:2008-04-10  
就模式说模式, 一点意义没有
0 请登录后投票
   发表时间:2008-04-11  
这帖子气氛真不怎么好
楼主提到了好莱坞原则,猜测是想应用Template Method模式吧。不过好像没有体会好莱坞原则的重点,好莱坞原则的关键是好莱坞对项目的完全控制,演艺人员只能服从好莱坞领导的安排,在需要的的时候完成自己的表演。

在这个例子里Class A的go()方法定义好顶层的逻辑,换句话说go()是模板方法,最好应该定义成final防止子类重写。Class A的prepare()和clearup() 方法属于顶层逻辑里的具体实现,最好也定义成final防止子类给他置换掉。Class A的going()抽象方法是要求子类实现的。设计好Class A后,生成A的子类时只需要考虑要去置换掉哪些操作,这样会使各个层次类的责任变的很清晰。Template Method模式在设计框架的时候会经常用到。

如果楼主事先说明Template Method模式也许效果会好些
懂点设计的人都知道继承不能乱用,但是并不代表不用

以上无论对错希望大家以一个有好的气氛来探讨
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics