設計模式 | 中介者模式/調停者模式(Mediator)
阿新 • • 發佈:2020-11-01
定義:
用一箇中介物件來封裝以系列的物件互動。中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地變化他們之間的互動。結構:(書中圖,侵刪)
一個抽象中介者 若干具體中介者 一個抽象同事類 若干個具體同事類例項:
我覺得git就相當於一箇中介者,使用者之間不用互相認識,但是可以互相改程式碼。 抽象中介介面:package designpattern.mediator; public interface Mediator { public void commit(String memo, User sender); }
使用者類(抽象同事類):
packagedesignpattern.mediator; public abstract class User { protected Mediator mediator; public User(Mediator mediator) { this.mediator = mediator; } }
倉庫所有者類(具體同事類):
package designpattern.mediator; public class Owner extends User { public Owner(Mediator mediator) { super(mediator); } public void commit(String memo) { mediator.commit(memo, this); } public void receive(String memo) { System.out.println("所有者收到資訊:" + memo); } }
開發者類(具體同事類):
package designpattern.mediator; public class Developer extends User { public Developer(Mediator mediator) {super(mediator); } public void commit(String memo) { mediator.commit(memo, this); } public void receive(String memo) { System.out.println("開發者收到資訊:" + memo); } }
GitHub類(具體中介者類):
package designpattern.mediator; public class GitHub implements Mediator { Owner owner; Developer developer; public void setOwner(Owner owner) { this.owner = owner; } public void setDeveloper(Developer developer) { this.developer = developer; } @Override public void commit(String memo, User sender) { if (sender == owner) { developer.receive(memo); } else { owner.receive(memo); } } }
客戶端:
package designpattern.mediator; public class Client { public static void main(String[] args) { GitHub gitHub = new GitHub(); Owner owner = new Owner(gitHub); Developer developer = new Developer(gitHub); gitHub.setOwner(owner); gitHub.setDeveloper(developer); owner.commit("我新建了一個專案"); developer.commit("我幫你改了一個BUG"); } }
結果輸出:
開發者收到資訊:我新建了一個專案
所有者收到資訊:我幫你改了一個BUG