概念
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());
}
}
控臺輸出
源碼樣例演示