java系统架构师有的特质_Java中特质模式的定义

java系统架构师有的特质

特质 在本文中,我将介绍特征的概念,并为您提供一个具体示例,说明如何在Java中使用它们以减少对象设计中的冗余。 我将首先提出一个虚构的案例,其中可以使用特征来减少重复,然后以使用Java 8的特征模式示例实现为结尾。

假设您正在开发留言板软件,并且已将以下内容标识为数据模型:“主题”,“评论”和“附件”。 主题具有标题,内容和作者。 评论包含内容和作者。 附件有标题和斑点。 一个主题可以有多个评论和附件。 一个评论也可以有多个评论,但没有附件。

sYNIoqcYfpLJSRv3r4ygz8w

很快,您意识到无论您如何实现这三个模型,程序中都会有代码重复。 例如,如果您想编写一种在帖子中添加新评论的方法,则需要编写一种用于评论主题的方法和一种用于评论评论的方法。 编写一种通过打印出讨论树来总结讨论的方法时,必须考虑到节点可以是主题,评论或附件。

自Java于20年前问世以来,面向对象的编程一直是该语言的骨肉,但是在此期间,其他语言也尝试使用其他工具来组织程序的结构。 我们在Speedment Open Source中使用的一种这样的工具称为“特质”。 特性是一种“微接口”,它描述了类设计的某些特征,可以在整个系统的许多不同组件中找到它们。 通过引用特征而不是实现类本身,可以使系统保持解耦和模块化。

让我们看一下这将如何改变留言板的示例。

sgt3SF_AoeXL0Lo7YonS9HA

现在,每个实体的不同特征已分为不同的接口。 很好 由于Java允许我们每个类具有多个接口,因此在编写业务逻辑时我们可以直接引用这些接口。 实际上,完全不必公开这些类!

在其他编程语言(例如Scala,PHP,Groovy等)中存在很多特性。 据我所知,关于什么被视为不同语言之间的特征尚无共识。 在有关特征的Wikipedia页面上 ,它说:

“特质既提供了一组实现类行为的方法,又要求类实现了一组参数化所提供行为的方法”

以下特性被命名为特征特有的:

  • 特征可以组合(对称和)
  • 特质可以被覆盖(不对称总和)
  • 特质可以扩展(别名)
  • 特质可以排除(排除)

从Java 8开始,您实际上可以使用接口满足大多数这些条件。 例如,您可以使用满足对称求和标准的and(&)运算符将未知类型的实现类强制转换为特征并集。 这里描述了一个很好的例子。 通过创建新接口并使用默认实现,您可以覆盖某些方法来满足不对称求和条件。 别名可以以类似方式创建。 唯一的问题是排除。 当前,java无法从继承中删除方法,因此无法防止子类访问特征中定义的方法。

如果返回到留言板示例,则可能需要一个示例,该示例要求实现类具有getComments方法,但是有关在注释上添加,删除和流式传输的所有其他逻辑都可以放在接口中。

public interface HasComments<R extends HasComments<R>> {// one method that parameterize the provided behaviourList<Comment> 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

java系统架构师有的特质

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html快速排序,快速排序.html

Titlevar arr2 [13, 4, 35, 67, 86, 24, 86, 34, 76];function quickSort(arr) {//如果数组<1,则直接返回if (arr.length < 1) {return arr;}var pivotIndex arr[arr.length - 1];//找基准&#xff0c;并把基准从原数组删除// var pivotarr.splice(pivotIndex,1)[0];//…

tdd java_Java TDD简介–第2部分

tdd java再次问好&#xff01; 在上一篇博客文章中&#xff0c;我在没有紧密引用Java的情况下总体上解释了TDD理论 &#xff0c;但是在这一部分中&#xff0c;我们开始进行TDD实践。 我们的目标是遍历TDD的所有阶段&#xff1a;从需求分析到测试代码的重构。 我们将在具有Java&…

计算机怎么没有桌面文件夹名称大全,你的电脑文件总是找不到?是时候学习文件夹分类整理了...

我们常常说做好办公整理&#xff0c;我们工作起来才更有效率&#xff1b;此处的办公整理不单单是对办公桌整理整齐&#xff0c;电脑里面的文件也需要定期整理&#xff0c;你有没有发现常常找一个文件的时候却总是找不到&#xff1f;那么此时就应该学习文件夹分类整理了&#xf…

selenide_使用Selenide进行有效的UI测试

selenide等待奇迹 圣诞节是奇迹的时刻。 在新的一年的前夕&#xff0c;我们都会制定下一个计划。 我们希望所有问题都将在最后一年消失&#xff0c;在来年出现奇迹。 每个Java开发人员都梦想着奇迹&#xff0c;使他成为世界上最有效的Java开发人员。 我想向你展示这样的奇迹…

计算机无法维修技术鉴定,计算机维修工技能鉴定(初级)剖析..pdf

计算机(微机)维修工初级理论知识复习题一、单项选择1、液晶显示器画面出现闪动的现象&#xff0c;原因可能是 ( C )。A 、数据线与显卡接口接触不良 B、操作系统有问题C 、显示器与主板不兼容 D、以上都不正确2、职业道德内涵是从事一定职业的人们在职业活动中应该遵循的&#…

实践与反思_在行动中反思的实践

实践与反思在上一篇文章中 &#xff0c;我解释了最基本的敏捷实践是反思。 在本文中&#xff0c;我概述了组织&#xff0c;团队和人员如何在行动中运用反思的示例。 回顾反思 回顾是功能强大的工具&#xff0c;整个团队都可以使用它们来反思其当前的工作实践&#xff0c;以了解…

win10无法更改计算机设置,Win10“无法保存ip设置,请检查一个或多个设置并重试”的解决方法...

近期有网友想要在Win10系统中手动设置本机IP地址&#xff0c;但是填写完毕之后却提示了“无法保存ip设置,请检查一个或多个设置并重试”&#xff0c;那么遇到这个问题&#xff0c;我们要如何解决呢&#xff1f;下面装机之家分享一下Win10“无法保存ip设置,请检查一个或多个设置…

24段魔尺拼图指南_拼图项目动手指南

24段魔尺拼图指南Jigsaw项目将把模块化引入Java平台&#xff0c;根据原始计划&#xff0c;它将在12月10日完成功能。 所以我们在这里&#xff0c;但拼图在哪里&#xff1f; 在过去的六个月中肯定发生了很多事情&#xff1a; 原型问世 &#xff0c;内部API的迫在眉睫的删除引起…

2018深大计算机考研,深圳大学2018年硕士生招生复试分数线及调剂需求

深圳大学2018年硕士生招生复试分数线及调剂需求深圳大学硕士研究生复试分数线是在通过国家A类线(国家线)的基础上&#xff0c;按各专业复试人数中最后一名考生的总分成绩确定的。根据我校高水平大学建设目标&#xff0c;原则上只接收全日制本科毕业于具有推荐优秀应届本科毕业生…

sql 解析 java_将Java 8流解析为SQL

sql 解析 java当Java 8发行并且人们开始流式处理各种东西时&#xff0c;不久之后他们就开始想象如果可以以相同的方式使用数据库将有多大的潜力。 本质上&#xff0c;关系数据库由以表状结构组织的巨大数据块组成。 这些结构非常适合进行过滤和映射操作&#xff0c;如SQL语言的…

Socket编程项目VS开发环境配置

项目属性->连接器->输入->附加依赖项里加入ws2_32.lib

杭州电子科技大学保研计算机,杭州电子科技大学计算机学院计算机科学与技术(一级学科)保研细则...

杭州电子科技大学计算机学院计算机科学与技术(一级学科)保研细则信息&#xff0c;是考研之前需要获取相应的考研信息&#xff0c;比如考试大纲、招考专业、招考目录等等基本信息&#xff0c;这些内容是进行考研前期工作的必要准备。考生可以从各院校的研招网进行查询&#xff0…

keepalived安装与配置_Nginx_Keepalived高可用配置

利用keepalived实现高可靠配置(HA) 2.1. 高可靠概念HA(High Available)&#xff1a;高可用性集群&#xff0c;是保证业务连续性的有效解决方案&#xff0c;一般有两个或两个以上的节点&#xff0c;且分为活动节点及备用节点。2.2. 高可靠软件keepalivedkeepalive是一款可以实现…

java不可变类型_Java中的值类型:为什么它们不可变?

java不可变类型值类型不必是不变的。 但是他们是。 在上一篇文章中&#xff0c;我讨论了Java中指针与引用之间的区别以及如何传递方法参数&#xff08;按值传递或按引用传递&#xff09;。 这些与Java中尚不存在的值类型密切相关&#xff08;尚未&#xff09;。 John Rose&am…

六步创建TCP服务端

//六步创建TCP服务端 #include<iostream> #include<Windows.h> using namespace std;int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOCKET _sock ::socket(A…

计算机控制cs,计算机控制

计算机控制锯齿波形源码CODESEGMENTASSUME CS:CODESTART:MOV AX,8100H ;数据段MOV DS,AXMOV AX,7000H ;8251串口寄存器&#xff0c;存储空间 7000H:8000HMOV ES,AXXOR AL,ALWAVE:XOR DX,DX ;0832口地址 0000HOUT DX,ALINC ALMOV AH,AL;保存AL内容MOV DX,0…

返回路径平面上的间隙_裁切机的上刀下刀如何调整?

每天都在使用裁切机时&#xff0c;由于各种因素往往会出现上刀、下刀现象(也称凸刀、凹刀现象)&#xff0c;给后面的套准带来困难。在此小编对上刀、下刀现象的产生原因做一分析与总结。01千斤压力不够(1)机械压力弹簧弹力不够。此时必须增大压力&#xff0c;如果增大到最大位置…

spring-bean版本_如何模拟Spring bean(版本2)

spring-bean版本大约一年前&#xff0c;我写了一篇博客文章如何模拟Spring Bean 。 所描述的模式对生产代码几乎没有侵入性。 正如读者Colin在评论中正确指出的那样&#xff0c;基于Profile注释的间谍/模拟Spring bean是更好的选择。 这篇博客文章将描述这种技术。 我在工作中以…

四步创建TCP客户端

//四步简历TCP服务端 #include<iostream> #include<Windows.h> using namespace std;int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOCKET _sock ::socket(A…

pcb板材的tg是什么_做到这6点,PCB过回焊炉不会出现板弯及板翘!

【维文信PCBworld】在PCB板子过回焊炉容易发生板弯及板翘&#xff0c;大家都知道&#xff0c;那么如何防止PCB板子过回焊炉发生板弯及板翘&#xff0c;下面就为大家阐述下&#xff1a;1.降低温度对PCB板子应力的影响既然「温度」是板子应力的主要来源&#xff0c;所以只要降低回…