首页 | 博客群 | 公社 | 专栏 | 论坛 | 图片 | 资讯 | 注册 | 帮助 | 博客联播 | 随机访问
TheWhiteBoardMethod- -| 回首页 | 2007年索引 | - -CodeBloating

AbstractionVsConfusion

                                      

如果你要建立一个Swing的目录树,那么你不能直接用File因为File的toString是全部路径的,而你只是希望toString返回一个当前路径。那么最简单就是建立一个Node类:

Node>>
   file: File
   toString: ^file.name

但这只是组合,不是抽象,问题就在于你要同时去折腾Node和File两个概念,尤其在递归的结构里面,更加麻烦,而真正的抽象就是建立一个DirectoryNode抽象

DirectoryNode>>
    subDirs
    roots
    ...

这样DirectoryNode的使用者就完全不需要理会File这个类了,或者说DirectoryNode遮蔽了File,这才是抽象,因为我们用一个东西遮蔽着另一个东西,系统至少不需要对付两个概念。提供了更好的模块化,因为文件相关的东西全部被封装到DirectoryNode里面。

一般人做抽象常犯的错误就是错把confusion当成abstraction,抽象一定是要砍掉东西的,不是往上加东西的。

【作者: RonaldMatt】【访问统计:】【2007年06月15日 星期五 10:33】【注册】【打印

搜索

Google

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=6326463

回复

验证码:   
评论内容: