Delegate Pattern

Delegate Pattern

The basic function is the scheduling and distribution of tasks, separating the assignment and execution of tasks。In short, similar to a proxy, this proxy class handles your needs,As for calling that implementation class internally, the client doesn't care. In a way, it's similar to:Boss - > manager - > employees

a scene of  Issue an order to illustrate

public class Boss {
    public void command(String task,Leader leader){
        leader.doIt(task);
    }
}

as a boss I just need to command my employees leaders to do what i want to do

public interface IEmployee {
    void doIt(String task);
}
public class Leader implements IEmployee {
    Map<String,IEmployee> iEmployeeMap=new HashMap<String, IEmployee>();

    public Leader() {
        iEmployeeMap.put("Selling",new EmployeeA());
        iEmployeeMap.put("Buying",new EmployeeB());
    }

    @Override
    public void doIt(String task) {
        if (!iEmployeeMap.containsKey(task)){
            System.err.println("I have no coworker who can be used to do that!!!");
            return;
        }
        iEmployeeMap.get(task).doIt(task);
    }
}

as a leader i need to know which skills my coworkers have(there we use a  Leaders to spread commond made by boss)

tips:we put point of skill that each employees good at into map, so that if we have other employees, we just need put them into map and do not need to adjust code sharply

public class EmployeeB implements IEmployee{
    @Override
    public void doIt(String task) {
        System.out.println("to do Buying");

    }
}
public class EmployeeA  implements IEmployee{
    @Override
    public void doIt(String task) {
        System.out.println("to do Selling");

    }

To test(we just pass on what i want to do then, make leaders to do )

public class test {
    public static void main(String[] args) {
        new Boss().command("Selling",new Leader());
        new Boss().command("Buying",new Leader());
        new Boss().command("Eating",new Leader());
    }
}

How is delegate pattern used into source of code

java.lang.reflect.Method#invoke

 

 Sum up

advantage:

  • uncoupled: divide a monstrous requirement into different part to execute

disadvantage:

  • if a pretty complex demand we may need to  multilayer delegate

 

posted @ 2021-05-08 11:32  UpGx  阅读(199)  评论(0)    收藏  举报