装饰者模式在现实生活中有很多例子,比如说我想烤冷面,烤冷面默认就是鸡蛋,葱,我们可以添加烤肠,培根,或者我们可以说不要葱,
在Kotlin中,有两种方式实现装饰者模式
by方式
interface KaoLenMian{
fun price(): Int
fun addXiangCai()
fun addJiDan()
}
class BiaoZhunKaoLenMian: KaoLenMian {
override fun price(): Int {
addJiDan()
addXiangCai()
return 10
}
override fun addXiangCai() {
println("添加香菜")
}
override fun addJiDan() {
println("添加鸡蛋")
}
}
class BuYaoXiangCaiKaoLenMian(val kaoLenMian: KaoLenMian): KaoLenMian by kaoLenMian{
override fun price(): Int {
addJiDan()
return 10
}
}
自带装饰者模式
interface KaoLenMian{
fun price(): Int
fun addXiangCai()
fun addJiDan()
}
class BiaoZhunKaoLenMian: KaoLenMian {
override fun price(): Int {
addJiDan()
addXiangCai()
return 10
}
override fun addXiangCai() {
println("添加香菜")
}
override fun addJiDan() {
println("添加鸡蛋")
}
}
fun BiaoZhunKaoLenMian.qudiaoxiangcaiprice(): Int{
addJiDan()
return 10
}
用自带装饰者模式时需要注意的是
1、如果方法命名和原方法中相同,则优先使用原方法,
2、装饰模式只在相应模块中有效,在其他地方无效