栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

封装和吸气剂

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

封装和吸气剂

Allen Holub的文章(您提到的那篇文章)是完全正确的,至少在进行面向对象时,您不应该索要数据。不,显示事物不是打开对象的有效借口。

如果您有个

Book
,则要求
Book
使其显示!它不应该不管是否使用一个
JTextField
JTable
或什么的。当然,根据您的要求,您可以执行以下操作:

public final class Book {    ...    JComponent display() {        ...    }}

当然,面向对象的要点是您要尝试本地化更改(尽可能限制为一类)。唯一的方法是将依赖于相同事物的功能本地化(最好是)相同的类。也称为增加“内聚力”。

因此,现在,如果

Book
内部结构发生变化,则所有内容(包括如何
Book
显示)都在其
Book
本身内,因此无需“搜寻”使用的代码
Book

现在,答案是“干净”的,因为您正在将演示代码与“业务逻辑”混合在一起。可能有趣的是,不将演示文稿与“业务逻辑”混合在一起的整个想法来自早期,那时我们仍然认为演示文稿可能是“远程”到“业务对象”的,而“业务对象”可能是由多个应用程序用于不同的事物。就是
多层设计。YAGNI。大多数时候,没有真正的理由在单个应用程序中具有人为的技术界限。只要

Book
知道它是GUI应用程序的一部分,就不会造成任何危害,并且拥有真正的好处(可维护性)。

编辑:这是`display()方法的详细显示方式,其中显示了标题和作者(Swing的伪代码):

public final class Book {    private final String title;    private final List<Author> authors;    ...    public JComponent display() {        JPanel bookPanel = new JPanel();        bookPanel.add(new JLabel(title));        JList authorsList = new JList(); // Or similar        for (Author author: authors) { authorsList.add(author.display());        }        bookPanel.add(authorsList);        return bookPanel;    }}

然后,您可以

add()
将该组件简单地放置到想要在其中显示书的任何回转容器中。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438391.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号