建设银行网站上不去,h5手机网站怎么做,如何建立内外网网站,卖家电商平台有哪些在本文中#xff0c;我将介绍特征的概念#xff0c;并为您提供一个如何在Java中使用它们以在对象设计中减少冗余的具体示例。 我将首先提出一个虚构的案例#xff0c;其中可以使用特征来减少重复#xff0c;然后以使用Java 8的特征模式示例实现为结尾。 假设您正在开发留言… 在本文中我将介绍特征的概念并为您提供一个如何在Java中使用它们以在对象设计中减少冗余的具体示例。 我将首先提出一个虚构的案例其中可以使用特征来减少重复然后以使用Java 8的特征模式示例实现为结尾。 假设您正在开发留言板软件并且已将以下内容标识为数据模型“主题”“评论”和“附件”。 主题具有标题内容和作者。 评论包含内容和作者。 附件有标题和斑点。 一个主题可以有多个评论和附件。 一个评论也可以有多个评论但没有附件。 很快您就意识到无论如何实现这三个模型程序中都会有代码重复。 例如如果您想编写一种向帖子添加新评论的方法则需要编写一种用于评论主题的方法和一种用于评论评论的方法。 编写一种通过打印出讨论树来总结讨论的方法必须考虑到节点可以是主题评论或附件。 自Java于20年前问世以来面向对象的编程一直是该语言的骨肉但是在此期间其他语言也尝试使用其他工具来组织程序的结构。 我们在Speedment Open Source中使用的一种这样的工具称为“特质”。 特性是一种“微接口”它描述了类设计的某些特征可以在整个系统的许多不同组件中找到它们。 通过引用特征而不是实现类本身可以使系统保持解耦和模块化。 让我们看一下这将如何改变带有留言板的示例。 现在每个实体的不同特征已分为不同的接口。 很好 由于Java允许我们每个类具有多个接口因此在编写业务逻辑时可以直接引用这些接口。 实际上完全不必公开这些类 在其他编程语言例如ScalaPHPGroovy等中存在很多特性。 据我所知关于什么被视为不同语言之间的特征尚无共识。 在有关特征的Wikipedia页面上 它说 “特质既提供了一组实现类行为的方法又要求类实现了一组参数化所提供行为的方法” 以下特性被命名为特征特有的 特征可以组合对称和 特质可以被覆盖不对称总和 特质可以扩展别名 特质可以排除排除 从Java 8开始您实际上可以使用接口满足大多数这些条件。 例如您可以使用满足对称和标准的and运算符将未知类型的实现类强制转换为特征并集。 这里描述了一个很好的例子。 通过创建新接口并使用默认实现您可以覆盖某些方法来满足不对称求和条件。 别名可以以类似方式创建。 唯一的问题是排除。 当前java无法从继承中删除方法因此无法防止子类访问特征中定义的方法。 如果返回到留言板示例则可能需要一个示例该示例要求实现类具有getComments方法但是有关在注释上添加删除和流式传输的所有其他逻辑都可以放在接口中。 public interface HasCommentsR extends HasCommentsR {// one method that parameterize the provided behaviourListComment getComments();// two methods that implement the behaviourdefault R add(Comment comment) {getComments().add(comment);return (R) this;}default R remove(Comment comment) {getComments().remove(comment);return (R) this;}
} 如果我们有一个对象并且想将其转换为HasComments和HasContent的对称和则可以使用and运算符来实现 final Object obj ...;
Optional.of(obj).map(o - (HasComments? HasContent?) o).ifPresent(sum - {/* do something */}); 这就是这一次 PS如果您想有关特质的概念我真的建议您阅读N.Schärli等人于2003年发表的《 特征行为的可组合单位》 。 翻译自: https://www.javacodegeeks.com/2016/02/definition-trait-pattern-java.html