设计模式--中介者模式

xiaoxiao2021-02-28  113

1 中介者模式通过定义一个中介的方式解耦两个对象之间互相的调用。 中介抽象类:

public abstract class AbstractAgency { protected List<AbstractColleague> lstColleague = new ArrayList<AbstractColleague>(); /** * 消息处理方法 * * @param messgae * 消息 * @param colleague * 发送方 */ protected abstract void sendMessage(AbstractColleague colleague, String messgae); /** * 添加可发送同事 * * @param colleague */ protected void addListColleague(AbstractColleague colleague) { lstColleague.add(colleague); } }

具体实现类:

public class ConcreteAgency extends AbstractAgency { /** * 具体来执行发送请求 * * @param colleague * 发送方 * @param messgae * 消息 */ @Override protected void sendMessage(AbstractColleague colleague, String message) { for (AbstractColleague abstractColleague : lstColleague) { System.out.println(abstractColleague.getClass().getName()); if (abstractColleague != colleague) { abstractColleague.receiveMessage(message); } } } }

同事抽象类:

public abstract class AbstractColleague { protected AbstractAgency mediator; public AbstractColleague(AbstractAgency mediator) { super(); this.mediator = mediator; } /** * 接收消息 * * @param message */ protected abstract void receiveMessage(String message); /** * 发送消息 * * @param message */ protected abstract void sendMessage(String message); }

实现类:

public class ConcreteColleague01 extends AbstractColleague { public ConcreteColleague01(AbstractAgency mediator) { super(mediator); } @Override protected void receiveMessage(String message) { System.out.println("Colleague01收到消息:"+message); } @Override protected void sendMessage(String message) { //交给中介去发送給指定的人 mediator.sendMessage(this, message); } } public class ConcreteColleague02 extends AbstractColleague { public ConcreteColleague02(AbstractAgency mediator) { super(mediator); } /** * 接收消息 */ public void receiveMessage(String message) { System.out.println("Colleague02收到消息:" + message); } @Override protected void sendMessage(String message) { System.out.println("Colleague02发送消息:" + message); mediator.sendMessage(this, message); } }

测试:

public class TextMain { public static void main(String[] args) { AbstractAgency agency = new ConcreteAgency(); AbstractColleague colleague01 = new ConcreteColleague01(agency); AbstractColleague colleague02 = new ConcreteColleague02(agency); // 添加要发送的同事 agency.addListColleague(colleague01); agency.addListColleague(colleague02); //发送 colleague01.sendMessage("hello"); } }

常考《大话设计模式》

转载请注明原文地址: https://www.6miu.com/read-29813.html

最新回复(0)