JiveJdon Community Forums
在线423人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 1 回复 / 1
 发表新帖子   回复该主题贴
lyojbuilder

悄悄话
发表文章: 194
注册时间: 2003年03月14日 00:34
从设计模式中去掉接口 2006年03月10日 12:45 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 设计模式(166)      接口实现(24)     
我看了网站上写的关于设计模式的介绍,写的很精辟. 同时我发现一个现象,几乎所有的设计模式都是使用接口作为起点,而不是纯粹的类. 但是如果仔细考虑的话,这是增加工作量,完全可以把这些接口通通去掉,换成类来实现.例如 这篇文章: decorator
其中一段代码:

Work squarePeg = new SquarePeg();
Work decorator = new Decorator(squarePeg);
decorator.insert();

我完全可以把 Work 接口换成一个普通的类,再功能上都能实现Decorator模式.为什么一定要用接口,这无疑是增加工作量?

有几个理由要使用类而不是接口:

1.使用Decorator模式目的是为了在旧系统的基础上增加新的功能,但是往往旧的系统使用的全是类,而不是接口,就是说他们开始就没有把架构设计成接口形式的(这也没有什么不对的).所以就要适应他们的类环境.而不是到处都是接口.

2.使用类能达到同样的目的而且能减少代码,例如我把Work接口换成WorkImpl:



WorkImpl squarePeg = new WorkImpl();
Decorator decorator = new Decorator(squarePeg);
decorator.insert();


这里我把接口全换成类,同样体现了Decorator的作用.有人会说接口灵活,可以有不同的实现,但这种说法站不住脚.假如我想把WorkImpl换成WorkImpl2类来实现,使用Decorator2来实现的话,我可以把上面代码改成:

WorkImpl2 squarePeg = new WorkImpl2();
Decorator2 decorator = new Decorator2(squarePeg);
decorator.insert();


如果使用接口,同样要改! 接口如下:


Work squarePeg = new SquarePeg2();
Work decorator = new Decorator2(squarePeg);
decorator.insert();


而且增加了设计接口和编写接口的工作量.

3.如果使用类的话,如果以后的类 WorkImpl变了,那麽,修改他的代码就可以,但如果使用接口,大家注意了,同样要改实现!也就是说仍然要改代码,所以使用接口的本质是没有变化的,实质并没有减小工作量.而增加的是编写接口的工作量.

其他的设计模式也是同样的道理,我看了几个,都可以把其中的接口通通换成类来实现.
大家也可以试试,目的都是减少代码,使系统灵活,而他们都能达到目的.
MiMiEye

悄悄话
发表文章: 38
注册时间: 2005年02月21日 12:00
Re: 从设计模式中去掉接口 2006年03月11日 09:49 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
比较精僻,呵呵。
不过,写成接口的形式只是为以后的扩展或应用打开基础。
就像现在的建筑,都只做成框剪结构,其余的事情由后来人随便装修。
你现在的情况就像是在砖混结构上进行小面积装修。
随便说说看法,大家一起讨论一下。
这个主题有 1 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  每2分种自动备份发贴内容Ctrl-V粘贴取出,提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam