设计模式--中介者模式

来源:互联网 发布:淘宝卖家营销分析 编辑:程序博客网 时间:2024/05/28 16:23

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");    }}

常考《大话设计模式》

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 点痣留下了疤怎么办 危险三角区长痘痘怎么办 挤了危险三角区怎么办 三角区长痘挤了怎么办 三角区发红长痘怎么办 激光祛斑碰水了怎么办 激光打痣留下坑怎么办 点痣之后留下坑怎么办 去痣留下的红印怎么办 激光点痦子留疤怎么办 激光点痣的疤痕怎么办 做完眉毛碰水了怎么办 脸上疤掉了有坑怎么办 结痂不小心抠掉怎么办 脸上肉松弛怎么办19岁 点痣留下来的疤怎么办 激光祛斑的红印怎么办 脸上疤掉了红印怎么办 痘痘发炎了红肿怎么办 脸上的斑越来越多了怎么办 点痣留下的疤痕怎么办 额头又高又大怎么办 脸太长额头太高怎么办 动车因台风停运怎么办 爸妈50了要离婚怎么办 鸿利彩票黑了钱怎么办 忘了锁屏图案怎么办 黄金被水银沾上怎么办 被股东了我该怎么办 异地恋没话题聊怎么办 谈了半年分手了怎么办 博士6年没毕业怎么办 发现孩子早恋家长应该怎么办 异地恋想嘿嘿嘿怎么办 妈妈溜冰溜大了怎么办 皮鞋被雨水泡了怎么办 老婆提出离婚我不想离怎么办 极度缺爱的人怎么办 生二胎住院大宝怎么办 爸妈偏心我该怎么办 无创21体高风险怎么办