JiveJdon Community Forums
在线156人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi 天极网摘
???en_US.forumThreadNext.name??? 下一主题
1 2 Go 共有 20 回复 / 2
 发表新帖子   回复该主题贴
jxb8901

悄悄话
发表文章: 117
注册时间: 2002年10月24日 13:16
关于"不做事"的类 2003年05月15日 11:32 到本帖网址 加入本帖到收藏夹 回复该主题
标签
请看下面的类图和问题:

一种解决的方法是将"不做事的类"修改为接口, 由做事的类来继承, 但这种完全颠倒的类层次关系又与真实情况不符, 而且这种设计几乎无法这样的设计变更: "不做事的类"又可能被分配了新的职责.

各位有更好的方法吗?
jxb8901

悄悄话
发表文章: 117
注册时间: 2002年10月24日 13:16
Re: Java类的构造器可以继承吗? 2003年05月15日 11:36 到本帖网址 加入本帖到收藏夹 回复该主题
问题的根本在于"Java类的构造器的继承问题".
banq

悄悄话
发表文章: 9613
注册时间: 2002年08月03日 17:08
Re: Java类的构造器可以继承吗? 2003年05月15日 18:49 到本帖网址 加入本帖到收藏夹 回复该主题
关键看你这样做是想解决什么问题,遇到这种尴尬可能是你的设计还没有抓住本质。
blues

悄悄话
发表文章: 74
注册时间: 2002年09月23日 17:07
Re: 关于"不做事"的类 2003年05月17日 17:21 到本帖网址 加入本帖到收藏夹 回复该主题
不用"继承",用"聚合"的方式
jxb8901

悄悄话
发表文章: 117
注册时间: 2002年10月24日 13:16
Re: 关于"不做事"的类 2003年05月19日 13:33 到本帖网址 加入本帖到收藏夹 回复该主题
使用"聚合"好象是不能解决问题的.

比较倾向banq的观点, 可能是我对问题的本质把握不深, 设计时总感觉思路不够顺畅, 可能只有经过一次或多次的迭代后才能完善设计.
banq

悄悄话
发表文章: 9613
注册时间: 2002年08月03日 17:08
Re: 关于"不做事"的类 2003年05月19日 17:17 到本帖网址 加入本帖到收藏夹 回复该主题
把问题 提出来,一起来看看?
jxb8901

悄悄话
发表文章: 117
注册时间: 2002年10月24日 13:16
Re: 关于"不做事"的类 2003年05月20日 13:50 到本帖网址 加入本帖到收藏夹 回复该主题
我把问题重新描述一下, 看附图.
系统从Exception派生了一个AppException作为系统所有其它具体异常的父类, 尽管AppException本身已经是一个功能十分完备的类, 但其名称却没有更具体的含义, 因此当系统中某个模块要抛出自己的异常时, 要求其从AppException再派生一个更具体的异常类, 该类本身的功能可以由其父类AppException来完成, 而另外派生一个异常类的目的只是为了使模块抛出的异常对于用户更有意义.

因为AppException定义了多个构造器,这就造成了所有子类也必须重复定义所有构造器, 而事实上派生类并没有添加额外的功能(也就是我说的"不做事"的类).(不过也不能排除派生类还要添加其它功能的可能性).

magician

悄悄话
发表文章: 27
注册时间: 2003年05月23日 17:32
Re: 关于"不做事"的类 2003年05月23日 17:33 到本帖网址 加入本帖到收藏夹 回复该主题
其实那些异常并不是什么事都没做

他们可以拥有自己定制的出错信息,而不是继承父类的

你可以参照JDK里的异常继承机制

当然,你那样做没有错,不过如果真是那样,还不如只要一个ApplicationException,因为单纯的继承,出错信息都一样。

am i right? maybe ...........
jxb8901

悄悄话
发表文章: 117
注册时间: 2002年10月24日 13:16
Re: 关于"不做事"的类 2003年05月23日 18:34 到本帖网址 加入本帖到收藏夹 回复该主题
我的意思是子类需要写太多与父类相同的构造函数, 你不觉得这很麻烦吗?
另外, 我说过了这些子类在设计初期可能"不做事", 但不能排除以后为其添加新的职责的可能性, 这也是不能使用其它折中方案的原因之一.
jxb8901

悄悄话
发表文章: 117
注册时间: 2002年10月24日 13:16
Re: 关于"不做事"的类 2003年05月23日 18:43 到本帖网址 加入本帖到收藏夹 回复该主题
我的设计已经作了修改, 现在感觉上要好多了.

但我后面举例的情况(异常的层次结构), 其实在其它很多地方也有类似的尴尬出现, 但不见得都是设计问题.

我感觉这种问题应该是语言设计者所要考虑的.
wys1978

悄悄话
发表文章: 160
注册时间: 2002年09月03日 12:28
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
}

}

iceant

悄悄话
发表文章: 459
注册时间: 2002年10月13日 22:32
Re: 关于"不做事"的类 2003年05月24日 11:12 到本帖网址 加入本帖到收藏夹 回复该主题
TO:jxb

设计总是一件很有意思的事,但是实现,确是件麻烦的事。
做程序就是这样,除非你们有专门的 Coding.

做程序就是脑力体力一块干的活~~ :(
jxb8901

悄悄话
发表文章: 117
注册时间: 2002年10月24日 13:16
Re: 关于"不做事"的类 2003年05月26日 11:47 到本帖网址 加入本帖到收藏夹 回复该主题
To: wys1978

我试了一下, JBuilder也有类似的功能. 不过我用的很少, 因为新类一般都是由建模工具生成的.

sswqs

悄悄话
发表文章: 1
注册时间: 2002年11月23日 00:48
Re: 关于"不做事"的类 2003年07月02日 07:54 到本帖网址 加入本帖到收藏夹 回复该主题
用工厂方法代替构造函数
Fish

悄悄话
发表文章: 16
注册时间: 2003年07月24日 19:18
Re: 关于"不做事"的类 2003年07月25日 09:12 到本帖网址 加入本帖到收藏夹 回复该主题
我不明白你说的:子类要重写父类的构造方法 是什么意思? 子类没必要重写父类的构造方法啊。 除非你认为子类的构造方法与父类有不同时才需要重写,不然的话你就调用父类的构造方法呗。有什么不好?
标签
共有 20 回复 / 2Go 1 2
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG:
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 插入附件 插入word文档 Txt等文件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl-V可取出;提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区 推荐Chrome快速浏览本站
OpenSource JIVEJDON v3.5 Powered by JdonFramework Code © 2002-09 jdon.com

anti spam