1.委派模式表现形式
当前对象需要做一件事,但是并不知道具体怎么干,需要委托另一个对象分配任务
如班主任想要举办活动,但是不知道哪些同学擅长哪些运动,于是委托班长安排合适的运动给合适的同学。
2.委派模式UML图
3.委派模式实例
3.1 班主任(最高父接口)
package cn.liulin.algorithm.dhdesign.wp;
/**
* cn.liulin.algorithm.dhdesign.wp$
*
* @author ll
* @date 2021-03-24 15:58:17
**/
public interface Person {
void doSport(String sportName);
}
3.2 班长
package cn.liulin.algorithm.dhdesign.wp;
import java.util.HashMap;
import java.util.Map;
/**
* cn.liulin.algorithm.dhdesign.wp$
* 班长
* @author ll
* @date 2021-03-24 16:06:24
**/
public class Monitor implements Person{
private Map<String, Person> mapper = new HashMap<>();
public Monitor() {
mapper.put("篮球", new PhysicalEducation());
mapper.put("唱歌", new MusicEducation());
}
@Override
public void doSport(String sportName) {
mapper.get(sportName).doSport(sportName);
}
}
3.3 体育委员
package cn.liulin.algorithm.dhdesign.wp;
/**
* cn.liulin.algorithm.dhdesign.wp$
* 体育课代表
* @author ll
* @date 2021-03-24 16:08:48
**/
public class PhysicalEducation implements Person{
@Override
public void doSport(String sportName) {
System.out.println("体育委员开始做" + sportName + "的活动");
}
}
3.4 音乐课代表
package cn.liulin.algorithm.dhdesign.wp;
/**
* cn.liulin.algorithm.dhdesign.wp$
* 音乐课代表
* @author ll
* @date 2021-03-24 16:10:34
**/
public class MusicEducation implements Person{
@Override
public void doSport(String sportName) {
System.out.println("音乐课代表开始做" + sportName + "的活动");
}
}
3.5 执行
package cn.liulin.algorithm.dhdesign.wp;
/**
* cn.liulin.algorithm.dhdesign.wp$
*
* @author ll
* @date 2021-03-24 16:12:52
**/
public class Sport {
public static void main(String[] args) {
Monitor monitor = new Monitor();
monitor.doSport("篮球");
monitor.doSport("唱歌");
}
}
3.6 执行结果
体育委员开始做篮球的活动
音乐课代表开始做唱歌的活动