2015-05-28
周海汉 2015.5.28
赖永浩在介绍python的mixin模式时,曾举例水果有适合送礼和不适合送礼的。如苹果和橘子吉利,适合送礼。而梨则表示离别,香蕉表示焦躁,所以不适合送礼。要实现这样的类当然可以用定义子类继承的方式,也可以用组合的方式。但这些方式侵入性较强,必须修改实现内部的源代码。
而mixin模式,翻译成中文叫混入模式,是侵入性较弱的。只需在定义的地方加上相应的混入基类,该类就有了相应的能力。混入类必须用trait标记。
class Fruit() {}
trait Gift {
def gift ={ true }
}
trait NoGift {
def gift ={ false }
}
class Apple(name:String) extends Fruit with Gift {
def nm = name
}
class Pear(name:String) extends Fruit with NoGift{
def nm = name
}
object BuyFruit{
def main(arr : Array[String]) {
val a = new Apple("apple")
println(a.nm + a.gift)
val p = new Pear("pear")
println(p.nm + p.gift)
}
}
采用混插方式,让苹果和梨具有了可以判断是否适合送礼的能力。mixin相当于外来的专家给的标签,直接贴在水果上。
zhh@test % scalac mixin.scala
zhh@test % scala -classpath . BuyFruit appletrue pearfalse
如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源
FEATURED TAGS
css
vc6
http
automake
linux
make
makefile
voip
乱码
awk
flash
vista
vi
vim
javascript
pietty
putty
ssh
posix
subversion
svn
windows
删除
编译
多线程
wxwidgets
ie
ubuntu
开源
c
python
bash
备份
性能
scp
汉字
log
ruby
中文
bug
msn
nginx
php
shell
wordpress
mqueue
android
eclipse
java
mac
ios
html5
js
mysql
protobuf
apache
hadoop
install
iocp
twisted
centos
mapreduce
hbase
thrift
tutorial
hive
erlang
lucene
hdfs
sqoop
utf8
filter
草原
yarn
ganglia
恢复
scrapy
django
fsimage
flume
tail
flume-ng
mining
scala
go
kafka
gradle
cassandra
baas
spring
postgres
maven
mybatis
mongodb
https
nodejs
镜像
心理学
机器学习
Keras
theano
anaconda
docker
spark
akka-http
json
群论
区块链
加密
抽象代数
离散对数
同余
欧拉函数
扩展欧几里德算法
ES6
node-inspect
debug
win10
vscode
挖矿