一、委托模式简介
(注:)不属于 23 种设计模式之一,是面向对象设计模式中常用的一种模式。
特点:持有被委托人的引用,不关心过程,只关心结果。
归类:行为型模式
核心:可以理解为静态代理和策略模式一种特殊的组合。
二、与代理模式的区别
代理模式:注重过程
委托模式:注重结果
三、与策略模式的区别
注重的外部扩展
注重的是内部的灵活和复用
四、实战演练
demo事例:老板给经理安排了A需求,经理接了,然后安排给程序员1去开发;
开发需求的接口 DevelopmentNeeds.java
package com.demo.delegate;
/**
* 开发需求
*/
public interface DevelopmentNeeds {
public void doing(String needsName);
}
实现改需求的两个苦逼的程序员 DevelopmentOne.java
package com.demo.delegate;
/**
* 实现改需求的两个苦逼的程序员
*/
public class DevelopmentOne implements DevelopmentNeeds{
@Override
public void doing(String needsName) {
System.out.println("我是程序员1号,我在苦逼的开发:"+needsName+"需求");
}
}
DevelopmentTwo .java
package com.demo.delegate;
public class DevelopmentTwo implements DevelopmentNeeds{
@Override
public void doing(String needsName) {
System.out.println("我是程序员2号,我在苦逼的开发:"+needsName+"需求");
}
}
根据功能安排某个程序员做事情的经理 Director .java
package com.demo.delegate;
import java.util.HashMap;
import java.util.Map;
/**
* 根据功能安排某个程序员做事情的经理
*/
public class Director implements DevelopmentNeeds{
private Map needs = new HashMap();
public Director() {
needs.put("洗车",new DevelopmentOne());
needs.put("优惠券",new DevelopmentTwo());
}
@Override
public void doing(String needsName) {
needs.get(needsName).doing(needsName);
}
}
DelegateTest.java
package com.demo.delegate;
public class DelegateTest {
public static void main(String[] args) {
new Director().doing("优惠券");
}
}
总结
功劳是经理的,具体做事的是程序员的