概念
1.委派模式,强调的是委派处理
类B和类A是两个互相没有任何关系的类,但是B具有和A一模一样的方法和属性;并且调用B中的方法/属性就是调用A中同名的方法和属性。
B好像就是一个受A授权委托的中介,第三方的代码不需要知道A的存在,也不需要和A发生直接的联系,通过B就可以直接使用A的功能,
这样既能够使用到A的各种功能,又能够很好的将A保护起来。
样例演示
定义接口:IEmployee
package com.gaoxinfu.demo.design.patterns.delegate;
public interface IEmployee {
public void deal(String commond);
}
定义接口实现A:EmployeeA
package com.gaoxinfu.demo.design.patterns.delegate;
public class EmployeeA implements IEmployee{
public void deal(String commond) {
System.out.println("大家好,我是员工EmployeeA ,我们来处理 "+commond+"工作");
}
}
定义接口实现B:EmployeeB
package com.gaoxinfu.demo.design.patterns.delegate;
public class EmployeeB implements IEmployee{
public void deal(String commond) {
System.out.println("大家好,我是员工EmployeeB ,我们来处理 "+commond+"工作");
}
}
定义中介委派实现:TeamLeader------>本质上具体的委派delegate是这个TeamLeader
package com.gaoxinfu.demo.design.patterns.delegate;
import java.util.HashMap;
import java.util.Map;
public class TeamLeader implements IEmployee{
private Map<String,IEmployee> targets=new HashMap<String, IEmployee>();
public TeamLeader() {
targets.put("登录功能",new EmployeeA());
targets.put("注册功能",new EmployeeA());
}
public void deal(String commond) {
targets.get(commond).deal(commond);
}
}
定义表面发号施令的Boss:Boss
package com.gaoxinfu.demo.design.patterns.delegate;
public class Boss{
public void deal(String commond,TeamLeader teamLeader) {
teamLeader.deal(commond);
}
}
测试演示BossTest
package com.gaoxinfu.demo.design.patterns.delegate;
public class BossTest {
public static void main(String[] args) {
Boss boss=new Boss();
boss.deal("登录功能",new TeamLeader());
}
}
控台输出
源码样例演示