中介這個詞語在現實生活中很常見,我們買房租房找中介,通過中介完成買賣房屋,買房和賣方直接和中介交流,完成交易合同。 房產中介,第三方平臺,支付寶這些等都屬於中介。他們在中間從當一個中間人的作用,承擔交易雙方的業務流程。 核心:中介者對象,該對象使一些複雜的業務處理簡化,使各業務處理對象直接和中介者打 ...
中介這個詞語在現實生活中很常見,我們買房租房找中介,通過中介完成買賣房屋,買房和賣方直接和中介交流,完成交易合同。
房產中介,第三方平臺,支付寶這些等都屬於中介。他們在中間從當一個中間人的作用,承擔交易雙方的業務流程。
核心:中介者對象,該對象使一些複雜的業務處理簡化,使各業務處理對象直接和中介者打交道。
例子:模擬公司業務處理。總經理充當中介者角色,負責協調各部門。
/** * 中介者抽象介面 */ public interface Mediator { //管理對象 void register(String name, Department departMent); //調用對象 void command(String something); }
/** * 部門內部對象介面 */ public interface Department { //完成部門任務 void doSomeThing(); //向中介者彙報,通知中介者調用 void apply(); }
public class FinacialDepartment implements Department { //持有中介者對象 private Mediator mediator; public FinacialDepartment(Mediator mediator) { this.mediator = mediator; mediator.register("finacial", this); } @Override public void doSomeThing() { System.out.println("財務部門工作"); } @Override public void apply() { System.out.println("財務彙報工作"); } }
/** * 研發部門 */ public class Development implements Department { //持有中介者對象 private Mediator mediator; public Development(Mediator mediator) { this.mediator = mediator; mediator.register("development", this); } @Override public void doSomeThing() { System.out.println("研發部門工作"); } @Override public void apply() { System.out.println("研發部門彙報工作需要財務部門支持。"); //通知中介者,調用其他對象方法 mediator.command("finacial"); } }
/** * 具體中介者 */ public class Manager implements Mediator { private Map<String, Department> map = new HashMap<>(); @Override public void register(String name, Department departMent) { map.put(name, departMent); } @Override public void command(String something) { map.get(something).doSomeThing(); } }
public class Client { public static void main(String[] args) { //中介者 Mediator manager = new Manager(); //各部門對象,中介者需要對接到具體對象 Department devop = new Development(manager); Department finaical = new FinacialDepartment(manager); devop.doSomeThing(); //通過向中介者發出申請,間接完成具體對象的調用 devop.apply(); } }
這個簡單例子中,通過中介者Manager使各部門交互關係解耦,每個對象持有中介者對象引用,只跟中介者對象打交道。
簡化了對象之間的關係,將系統的各個對象之間的相互關係進行封裝,將各個同事類解耦,使得系統變為松耦合。
當在業務處理中需要協調多個對象的關係,而又不需要去增加子類方法處理時可以考慮該模式。