scala akka 修炼之路5(scala特质应用场景分析)
scala中特质定义:包括一些字段,行为(方法/函数/动作)和一些未实现的功能接口的集合,能够方便的实现扩展或混入到已有类或抽象类中。
scala中特质(trait)是一个非常实用的特性,在程序设计中能够 更好的抽象现实。使程序更关注各自功能和更好的将程序拆分成多个特质模块,使程序具有更强的扩展性。熟悉java的同学。能够将特质理解为抽象类。可是scala中能够在一个类中同一时候混入多个特质(使用extends 或with)。而java中一个类仅仅能继承一个抽象类,假设要实现多个抽象类就必需使用多继承。scala中非常多基础类型功能扩展都使用了特质的特性。比如,基础类型中的布尔操作和比較接口功能扩展都是在Ordered[T]中实现,迭代功能的操作主要在TraversableOnce[+A],GenTraversableOnce[A]中实现,TraversableOnce中混入了GenTraversableOnce特质。小象觉得很多其它使用特质能够更好的站在抽象的层面设计程序和系统框架。
scala中使用Ordered特质实现基本类型的<,><=,>=功能
trait Ordered[A] extends Any with java.lang.Comparable[A] {
def compare(that: A): Int
def < (that: A): Boolean = (this compare that) < 0
def > (that: A): Boolean = (this compare that) > 0
def <= (that: A): Boolean = (this compare that) <= 0
def >= (that: A): Boolean = (this compare that) >= 0
def compareTo(that: A): Int = compare(that)
}
在系统总体设计阶段。做核心结构或模块抽象时,能够把具有同类行为和属性的特征抽象出来形成一个特质,然后在类型顶层(超级抽象类)或核心或子类型中混入一个或多个须要的特质。
这样做的优点在于能够依照特征对类型中主要功能进行分解和抽象,更好的任务分工,提高后期模块功能的可扩展和可维护性。
这样到每个开发人员手里的都是一个特征。后期功能扩展更加高效和清晰。比如开发一个关于消费者电商购买力的一个数据数据挖掘系统,如果依照用户年龄对用户进行分类简单分类——青年。中年,老年。将衡量用户购买能力基本特征分为下面五类:时间处理特征。地点处理特征,消费处理特征。商品类型处理特征和潜在购买特征;抽象类依照计算维度定义多个钩子函数。实现评价用户购买能力指标的计算模型,特征汇聚等的实现。子类主要代表不同类型用户的平台个性信息,计算因子。权重等基本信息。通过这样的设计方式能够将核心分析计算功能定义在抽象类中,实现功能的更高类聚性(专业的人做专业的事)。
假设使用java实现无论是使用多继承还是接口,想想都头大,并且不便于开发分工和后期维护。抽象类中实现的功能太多,非常难理解维护。
scala akka 修炼之路5(scala特质应用场景分析)的更多相关文章
- scala akka Future 顺序执行 sequential execution
对于 A => B => C 这种 future 之间的操作,akka 默认会自动的按照顺序执行,但对于数据库操作来说,我们希望几个操作顺序执行,就需要使用语法来声明 有两种声明 futu ...
- learning scala akka ask_pattern
package com.example import akka.actor._ import akka.util.Timeout object Tutorial_03_Ask_Pattern exte ...
- [Scala] akka actor编程(一)
Akka基础 Akka笔记之Actor简介 Akka中的Actor遵循Actor模型.你可以把Actor当作是人.这些人不会亲自去和别人交谈.他们只通过邮件来交流. 1. 消息传递 2. 并发 3 ...
- Spark之路 --- Windows Scala 开发环境安装配置
JDK安装 JDK安装包下载 到Oracle官网下载JDK. 传送门 下载之前要记得勾选上同意协议然后选择相应的版本(Windows/Linux, 32/64) JDK安装及验证 按提示完成安装,安装 ...
- scala函数式编程(二) scala基础语法介绍
上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...
- Scala:Java 项目中混入scala代码
Spark 是用Scala代码写的.为了调试Spark,做了如下尝试. 1.Eclipse下:Java 项目 ,Using Maven,编写了一个java 版Spark应用. Spark的代码(sca ...
- Beginning Scala study note(2) Basics of Scala
1. Variables (1) Three ways to define variables: 1) val refers to define an immutable variable; scal ...
- 我JAVA修炼之路
今天起,我会不定期更新我的java修炼之路, 2017.7.10,星期一 我参见了河南青云的培训班,这一天是我们的开班典礼. 我会不定期的总结我的学习笔记,大家喜欢的可以看看,不喜勿喷. 写代码: 1 ...
- Java工程师修炼之路(校招总结)
Java工程师修炼之路(校招总结) 前言 在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易, ...
随机推荐
- 菜鸟学SSH(十一)——Hibernate之SchemaExport+配置文件生成表结构
今天说点基础的东西,说说怎样通过SchemaExport跟Hibernate的配置文件生成表结构.事实上方法很easy,仅仅须要两个配置文件,两个Java类就能够完毕. 首先要生成表,得先有实体类,以 ...
- 用jQuery实现鼠标在table上移动进行样式变化
1.定义样式 <style type="text/css"> .striped { background-color:red; ...
- 2数组的slice和splice方法
var colors=["blue","red","black","yellow","gray",& ...
- 基于visual Studio2013解决C语言竞赛题之1054抽牌游戏
题目 解决代码及点评 /************************************************************************/ /* 54 ...
- Javascript做模糊查询
<html> <head> <title>Javascript模糊查找</title> </head> <body> <l ...
- http协议与web本质
当你在浏览器地址栏敲入“http://www.csdn.net/”,然后猛按回车,呈现在你面前的,将是csdn的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其是web开发人员,我想 ...
- Spring Boot,Spring Data JPA多数据源支持
1 配置文件 wisely.primary.datasource.driverClassName=oracle.jdbc.OracleDriver wisely.primary.datasource. ...
- Android SDK Manager安装报错
安装出错了,上网百度一大堆说法,又说版本兼容问题的,有说http换https的,我这个菜鸟真搞不明白,自己捣腾一下午总算弄上去了! 问题: 安装完Eclipse和ADT却无法更新SDK. 启动Andr ...
- 腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式
腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式 某移动公司实时 ...
- vector中的find
vector中的find - huangyimin的专栏 - 博客频道 - CSDN.NET vector中的find 2011-01-13 09:57 11334人阅读 评论(0) 收藏 举报 ve ...