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): Intdef < (that: A): Boolean = (this compare that) < 0def > (that: A): Boolean = (this compare that) > 0def <= (that: A): Boolean = (this compare that) <= 0def >= (that: A): Boolean = (this compare that) >= 0def compareTo(that: A): Int = compare(that)
}
在系统总体设计阶段。做核心结构或模块抽象时,能够把具有同类行为和属性的特征抽象出来形成一个特质,然后在类型顶层(超级抽象类)或核心或子类型中混入一个或多个须要的特质。
这样做的优点在于能够依照特征对类型中主要功能进行分解和抽象,更好的任务分工,提高后期模块功能的可扩展和可维护性。
这样到每个开发人员手里的都是一个特征。后期功能扩展更加高效和清晰。比如开发一个关于消费者电商购买力的一个数据数据挖掘系统,如果依照用户年龄对用户进行分类简单分类——青年。中年,老年。将衡量用户购买能力基本特征分为下面五类:时间处理特征。地点处理特征,消费处理特征。商品类型处理特征和潜在购买特征;抽象类依照计算维度定义多个钩子函数。实现评价用户购买能力指标的计算模型,特征汇聚等的实现。子类主要代表不同类型用户的平台个性信息,计算因子。权重等基本信息。通过这样的设计方式能够将核心分析计算功能定义在抽象类中,实现功能的更高类聚性(专业的人做专业的事)。
假设使用java实现无论是使用多继承还是接口,想想都头大,并且不便于开发分工和后期维护。抽象类中实现的功能太多,非常难理解维护。
scala akka 修炼之路5(scala特质应用场景分析)相关推荐
- scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)
胜败兵家事不期,包羞忍耻是男儿--斗牛士fighting,fighting,fighting... 小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,但是深入学习 ...
- Scala Akka网络编程:Client Server网络通信(你问我答)案例
最终效果 Server端 package cn.zxl.akka.serverimport akka.actor._ import cn.zxl.akka.common.{ClientMessage, ...
- scala函数式编程(二) scala基础语法介绍
上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...
- Scala函数式编程(三) scala集合和函数
前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的 ...
- 传承or创新 ?解密分布式数据库自研修炼之路
一直以来,数据库的核心研发团队都十分神秘,作为隐藏在幕后的隐士高人,他们对数据库研发的心得是什么?他们又对数据库的未来发展有什么看法呢?本文就由巨杉数据库核心技术研发团队的"老司机" ...
- 新成立的Scala中心将重点关注教育和Scala社区
在2016年6月的Scala Days柏林大会上,研究员Heather Miller在主题演讲中详细介绍了新成立的的Scala中心.这是一个非盈利性的组织,将重点关注教育和开源社区. \\ InfoQ ...
- 腾讯业务监控的修炼之路
作者丨李光:现任职于腾讯社交网络运营部/织云产品团队,负责织云监控告警平台规划与运维新产品开发工作,具有多年业务运维.运营规划经验. 概述 本文作为监控告警产品的专题系列的第二篇文章,主要讨论的是IA ...
- Scala入门到精通—— 第二节Scala基本类型及操作、程序控制结构
本节主要内容 Scala基本类型 基本类型操作 Scala程序控制结构 Scala基本类型 Scala中的基本数据类型如下图: (来源:Programming in scala) 从上表中可以看出,S ...
- Scala混用Java的集合类调用scala的foreach遍历问题
问题描述 [ERROR] /Users/jack/book/lightsword/src/main/scala/com/springboot/in/action/service/LightSwordU ...
最新文章
- win10蓝屏问题,关于驱动kisSaasUrlRedirectKnl64.sys 的
- 解读ADC采样芯片(EV10AQ190A)的采样(工作)模式(双通道模式)
- 深入浅出,Handler机制外科手术式的剖析(ThreadLocal,Looper,MessageQueen,Message)(上)...
- 生活、教育等相关概要
- 阿里巴巴数据分析沙龙 杭州站圆满召开
- 如何通过使用注册项 (.reg) 文件添加、修改或删除注册表子项和值
- dfinity什么时候发币_区块链3.0的Dfinity揭秘
- android程序崩溃了却没法通过log查看错误日志
- numpy 读取txt为array 一行搞定
- android 本地数据库sqlite的封装
- 苹果iPhone系列成交额5秒破亿;荣耀回应:没有安卓授权是假消息;魅族宣布将接入鸿蒙系统|极客头条...
- svn利用钩子post-commit自动更新到线上测试服务器
- 洛谷——P1744 采购特价商品
- 《人月神话》之画蛇添足读后感
- 测试固态硬盘写入数据软件,SSD测试软件简要说明
- linux开机自动执行脚本、运行程序
- php云打印类,PHP应用:PHP云打印类完整示例
- 小程序代码托管无忧,云效 代码管理接入支付宝小程序平台
- JavaWeb酒店管理系统
- Axure仿淘宝搜索原型
热门文章
- COMVariantType的Date类型
- c如何正常中断一个运行的线程
- Ajax实现DataGrid/DataList动态ToolTip
- DataGrid连接Access的快速分页法——动态生成SQL语句
- 支撑Spring的基础技术:泛型,反射,动态代理,cglib等
- Python3中上下文管理器介绍
- Leptonica在VS2010中的编译及简单使用举例
- C/C++代码静态检查工具PC-lint在VS2008开发环境中的安装配置和使用
- android 弹出fragment,Android中ViewPager获取当前显示的Fragment
- 计算机教师个人总结及自评,教师个人自评总结