委托模式
2019-05-15 本文已影响0人
Lucksheep
一、委托模式简介
- (注:)不属于 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<String,DevelopmentNeeds> needs = new HashMap<String,DevelopmentNeeds>();
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("优惠券");
}
}
总结
- 功劳是经理的,具体做事的是程序员的