一. 简介
委托模式不属于23种设计模式,是面向对象设计模式中常用的一种模式,可归类为行为模式;
二. 特点
持有被委托人的引用,不关心过程,只关心结果,核心可理解为静态代理 和 策略模式的一种特殊组合;
三. 与代理模式的区别
-
代理模式: 注重过程;
2. 委托模式: 注重结果;
四.与策略模式的区别
-
策略模式: 注重外部扩展;
-
委托模式: 注重内部的灵活和复用;
五. 模式的实现
需求: 老板给经理安排了商城系统 和 礼物系统需求, 经理接了,然后安排程序员1 和 程序员2 去开发;
1. 实例结构图
2. 相关代码
object Delegate {
@JvmStatic
fun main(args: Array<String>) {
Director().doing("商城系统")
Director().doing("礼物系统")
}
}
/** 1.开发需要的接口 */
interface DevelopmentNeeds {
fun doing(needsName:String)
}
/** 2.实现改需求的苦逼的程序员1号 */
class DevelopmentOne :DevelopmentNeeds{
override fun doing(needsName: String) {
println("我是程序员1号,我在苦逼的开发: $needsName 需求")
}
}
/** 2.实现改需求的苦逼的程序员2号 */
class DevelopmentTwo :DevelopmentNeeds{
override fun doing(needsName: String) {
println("我是程序员2号,我在苦逼的开发: $needsName 需求")
}
}
/** 3.根据功能安排某个程序员做事情的经理 */
class Director : DevelopmentNeeds {
var needs= HashMap<String,DevelopmentNeeds>()
init {
needs["商城系统"] = DevelopmentOne()
needs["礼物系统"] = DevelopmentTwo()
}
override fun doing(needsName: String) {
needs[needsName]?.doing(needsName)
}
}
程序运行结果
我是程序员1号,我在苦逼的开发: 商城系统 需求
我是程序员2号,我在苦逼的开发: 礼物系统 需求