????我們知道Java里共有23種設(shè)計(jì)模式帅刀,負(fù)責(zé)任務(wù)的調(diào)度和任務(wù)的分配,委派模式不屬于GOF 23種設(shè)計(jì)模式之一,委派模式屬于行為型設(shè)計(jì)模式盲镶。
委派模式
定義
委派模式又稱委托模式,將任務(wù)的分配和執(zhí)行分離開(kāi)來(lái)蝌诡,可以看做是一種特殊情況下的靜態(tài)代理的全權(quán)代理溉贿。
適用場(chǎng)景
(1) 委派對(duì)象本身不知道如何處理一個(gè)任務(wù)(或請(qǐng)求),把請(qǐng)求交給其他對(duì)象處理送漠。
(2) 實(shí)現(xiàn)程序的解耦顽照。
優(yōu)點(diǎn)
(1) 通過(guò)任務(wù)的委派能夠?qū)⒁粋€(gè)大型的任務(wù)細(xì)化。
(2) 能夠加快任務(wù)的執(zhí)行效率闽寡。
缺點(diǎn)
(1) 需要根據(jù)任務(wù)的復(fù)雜程度進(jìn)行不同的改變代兵。
(2) 在任務(wù)復(fù)雜的情況下可能需要多重委派,容易造成紊亂爷狈。
實(shí)例
/**
* 創(chuàng)建抽象接口
*/
public interface IEmployee {
void doSomething(String task);
}
/**
* 創(chuàng)建IEmployeeA類
*/
public class IEmployeeA implements IEmployee {
@Override
public void doSomething(String task) {
System.out.println("我是員工A,我擅長(zhǎng)" + task + "工作");
}
}
/**
* 創(chuàng)建IEmployeeB類
*/
public class IEmployeeB implements IEmployee {
@Override
public void doSomething(String task) {
System.out.println("我是員工B,我擅長(zhǎng)" + task + "工作");
}
}
/**
* 創(chuàng)建Leader類 委派類用于任務(wù)調(diào)度與分配
*/
public class Leader implements IEmployee {
private Map<String, IEmployee> map = new HashMap<String, IEmployee>();
public Leader() {
map.put("編程", new IEmployeeA());
map.put("UI", new IEmployeeB());
}
@Override
public void doSomething(String task) {
if (!map.containsKey(task)) {
System.out.println("超出能力范圍");
return;
}
map.get(task).doSomething(task);
}
}
/**
* 創(chuàng)建Boss類
*/
public class Boss {
//Boss下達(dá)命令
public void command(String task, Leader leader) {
leader.doSomething(task);
}
}
/**
* 創(chuàng)建測(cè)試類
*/
public class Test {
public static void main(String[] args) {
new Boss().command("編程", new Leader());
new Boss().command("UI", new Leader());
new Boss().command("數(shù)據(jù)分析", new Leader());
}
}