|
|
|
关于"不做事"的类
|
2003年05月15日 11:32
|
|
|
|
请看下面的类图和问题:
 一种解决的方法是将"不做事的类"修改为接口, 由做事的类来继承, 但这种完全颠倒的类层次关系又与真实情况不符, 而且这种设计几乎无法这样的设计变更: "不做事的类"又可能被分配了新的职责.
各位有更好的方法吗?
|
|
|
|
|
|
Re: Java类的构造器可以继承吗?
|
2003年05月15日 11:36
|
|
|
|
|
|
|
|
|
Re: Java类的构造器可以继承吗?
|
2003年05月15日 18:49
|
|
|
|
关键看你这样做是想解决什么问题,遇到这种尴尬可能是你的设计还没有抓住本质。
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月17日 17:21
|
|
|
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月19日 13:33
|
|
|
使用"聚合"好象是不能解决问题的.
比较倾向banq的观点, 可能是我对问题的本质把握不深, 设计时总感觉思路不够顺畅, 可能只有经过一次或多次的迭代后才能完善设计.
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月19日 17:17
|
|
|
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月20日 13:50
|
|
|
我把问题重新描述一下, 看附图. 系统从Exception派生了一个AppException作为系统所有其它具体异常的父类, 尽管AppException本身已经是一个功能十分完备的类, 但其名称却没有更具体的含义, 因此当系统中某个模块要抛出自己的异常时, 要求其从AppException再派生一个更具体的异常类, 该类本身的功能可以由其父类AppException来完成, 而另外派生一个异常类的目的只是为了使模块抛出的异常对于用户更有意义.
因为AppException定义了多个构造器,这就造成了所有子类也必须重复定义所有构造器, 而事实上派生类并没有添加额外的功能(也就是我说的"不做事"的类).(不过也不能排除派生类还要添加其它功能的可能性).
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月23日 17:33
|
|
|
其实那些异常并不是什么事都没做
他们可以拥有自己定制的出错信息,而不是继承父类的
你可以参照JDK里的异常继承机制
当然,你那样做没有错,不过如果真是那样,还不如只要一个ApplicationException,因为单纯的继承,出错信息都一样。
am i right? maybe ...........
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月23日 18:34
|
|
|
我的意思是子类需要写太多与父类相同的构造函数, 你不觉得这很麻烦吗? 另外, 我说过了这些子类在设计初期可能"不做事", 但不能排除以后为其添加新的职责的可能性, 这也是不能使用其它折中方案的原因之一.
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月23日 18:43
|
|
|
我的设计已经作了修改, 现在感觉上要好多了.
但我后面举例的情况(异常的层次结构), 其实在其它很多地方也有类似的尴尬出现, 但不见得都是设计问题.
我感觉这种问题应该是语言设计者所要考虑的.
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月24日 00:08
|
|
|
我不大明白jxb8901的意思, 是嫌这样的设计编码太麻烦吗? IDE会帮你解决的, 如eclipse, 你可以在create new Class的时候, 选择Superclass, 选择Constructors from superclass. 写一个子类只需要2秒钟, :) 我想jbuilder等其他IDE都应该有这样的功能吧? 看看它生成的代码:
public class CreateException extends AppException {
/** * */ public CreateException() { super(); // TODO Auto-generated constructor stub }
/** * @param msg */ public CreateException(String msg) { super(msg); // TODO Auto-generated constructor stub }
/** * @param msg * @param nested */ public CreateException(String msg, Throwable nested) { super(msg, nested); // TODO Auto-generated constructor stub }
}
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月24日 11:12
|
|
|
TO:jxb
设计总是一件很有意思的事,但是实现,确是件麻烦的事。 做程序就是这样,除非你们有专门的 Coding.
做程序就是脑力体力一块干的活~~ :(
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年05月26日 11:47
|
|
|
To: wys1978
我试了一下, JBuilder也有类似的功能. 不过我用的很少, 因为新类一般都是由建模工具生成的.
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年07月02日 07:54
|
|
|
|
|
|
|
|
|
Re: 关于"不做事"的类
|
2003年07月25日 09:12
|
|
|
|
我不明白你说的:子类要重写父类的构造方法 是什么意思? 子类没必要重写父类的构造方法啊。 除非你认为子类的构造方法与父类有不同时才需要重写,不然的话你就调用父类的构造方法呗。有什么不好?
|
|
|
|