美文网首页
行为模式之中介者模式

行为模式之中介者模式

作者: 后来丶_a24d | 来源:发表于2019-09-19 19:14 被阅读0次

总则

  • 设计原则:遵循迪米特,破坏单一职责
  • 常用场景:一个系列的对象交互关系十分复杂
  • 使用概率:10%
  • 复杂度:中
  • 变化点:对象之间的交互
  • 选择关键点:复杂的交互关系是否有共性可被中介者承担
  • 逆鳞:中介者无法工作
  • 中介者模式针对的问题是,解决一系列对象之间复杂的耦合关系,这一系列对象往往是“多对多”的耦合关系,《中介者模式》采用一个中介者对象将这一系列对象集中管理,而各个对象也将自己与其它对象的交互行为委托给中介者处理,从而减少这一系列对象之间的耦合。 它的优点倒是非常明显,清除了一系列对象之间复杂的耦合关系,并且中介者可以控制这一系列对象的行为,统一管理。

中介者模式

uml类图

中介者uml类图.png

中介者模式

//模式联盟,中介者接口
    public interface IPatternAlliance {

        //加入联盟
        public abstract void add(School school);

        //联盟攻击
        public abstract void resolveAttack(School activeSide, School passiveSide);

        //联盟防御
        public abstract void resolveDefense(School passiveSide);

    }

    //模式联盟,中介者
    public class PatternAlliance implements IPatternAlliance {

        private List<School> schoolList;

        public PatternAlliance() {
            super();
            schoolList = new ArrayList<School>();
        }

        public void add(School school){
            schoolList.add(school);
        }

        public void resolveAttack(School activeSide,School passiveSide){
            if (schoolList.contains(activeSide) && schoolList.contains(passiveSide)) {
                System.out.println("主攻方" + activeSide.getName() + "以及被攻方" + passiveSide.getName() + "都已加入联盟,不允许内讧!");
            }else if (schoolList.contains(activeSide) && !schoolList.contains(passiveSide)) {
                System.out.println("主攻方" + activeSide.getName() + "已加入联盟,被攻方" + passiveSide.getName() + "不在联盟之中,将集体攻打该门派!");
                for (School school : schoolList) {
                    school.attack(passiveSide);
                }
            }else {
                System.out.println("主攻方" + activeSide.getName() + "未加入联盟,联盟无权干预此事!");
                activeSide.attack(passiveSide);
            }
        }

        public void resolveDefense(School passiveSide){
            if (schoolList.contains(passiveSide)) {
                System.out.println("被攻方" + passiveSide.getName() + "已加入联盟,联盟将齐力防御!");
                for (School school : schoolList) {
                    school.defense();
                }
            }else {
                System.out.println("被攻方" + passiveSide.getName() + "未加入联盟,联盟不给予防御帮助!");
                passiveSide.defense();
            }
        }

    }

    //门派抽象类
    public abstract class School {

        protected IPatternAlliance patternAlliance;

        public School(IPatternAlliance patternAlliance) {
            super();
            this.patternAlliance = patternAlliance;
        }

        public void defense() {
            System.out.println(getName() + "防御");
        }

        public void attack(School school) {
            System.out.println(getName() + "攻击" + school.getName());
        }

        //有了中介者,将由中介者处理
        public void attackByPatternAlliance(School school){
            patternAlliance.resolveAttack(this, school);
        }

        public void defenseByPatternAlliance(){
            patternAlliance.resolveDefense(this);
        }

        public abstract String getName();

    }

    public class CommandSchool extends School{

        public CommandSchool(IPatternAlliance patternAlliance) {
            super(patternAlliance);
        }

        public String getName() {
            return "命令门";
        }

    }

    public class MediatorSchool extends School{

        public MediatorSchool(IPatternAlliance patternAlliance) {
            super(patternAlliance);
        }

        public String getName() {
            return "中介者神阁";
        }

    }

    public class SingletonSchool extends School{

        public SingletonSchool(IPatternAlliance patternAlliance) {
            super(patternAlliance);
        }

        public String getName() {
            return "单例宗";
        }

    }

    public class StrategySchool extends School{

        public StrategySchool(IPatternAlliance patternAlliance) {
            super(patternAlliance);
        }

        public String getName() {
            return "策略宫";
        }

    }

    //大陆格局
    public class ContinentalPattern {

        public static void main(String[] args) {
            IPatternAlliance patternAlliance = new PatternAlliance();

            School singletonSchool = new SingletonSchool(patternAlliance);
            School commandSchool = new CommandSchool(patternAlliance);
            School mediatorSchool = new MediatorSchool(patternAlliance);

            School strategySchool = new StrategySchool(patternAlliance);

            //策略宫没有被联盟收留
            patternAlliance.add(mediatorSchool);
            patternAlliance.add(commandSchool);
            patternAlliance.add(singletonSchool);

            singletonSchool.attackByPatternAlliance(mediatorSchool);
            commandSchool.attackByPatternAlliance(mediatorSchool);
            System.out.println("------------------------------------------------------");
            mediatorSchool.attackByPatternAlliance(strategySchool);
            System.out.println("------------------------------------------------------");
            strategySchool.attackByPatternAlliance(mediatorSchool);
            mediatorSchool.defenseByPatternAlliance();
            System.out.println("------------------------------------------------------");
        }

    }

相关文章

  • 行为型模式:中介者模式

    LieBrother公众号原文:行为型模式:中介者模式 十一大行为型模式之二:中介者模式。 简介 姓名 :中介者模...

  • 设计模式[21]-中介者模式-Mediator Pattern

    1.中介者模式简介 中介者模式(Mediator Pattern)模式是是行为型(Behavioral)设计模式,...

  • 中介者模式(Mediator Pattern)

    中介者模式:使用中介者模式来集中相关对象之间复杂的沟通和控制方式。 中介者模式是行为型模式之一。这里中介者模式的定...

  • 行为模式10-行为模式总结

    行为模式10-行为模式总结 行为模式总共有11个设计模式: 观察者模式(Observer) 中介者模式(Media...

  • Android设计模式——中介者模式(十一大行为型)

    1.中介者模式介绍 中介者模式(Mediator Pattern),是十一大行为型设计模式之一。 中介者模...

  • 中介者模式

    中介者模式是行为型模式的一种,同时属于行为模式的还有:命令模式,观察者模式,状态模式和策略模式 意图:用一个中介对...

  • 33 Java设计模式系列-中介模式

    一、中介者模式 中介者模式又叫调解者模式或调停者模式,是行为型设计模式之一。 生活中的中介者的作用就是连接两方的一...

  • 行为模式2-中介者模式

    行为模式2-中介者模式 中介者模式 Mediator 意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不...

  • Javascript 设计模式

    创建型模式 工厂模式 建造者模式 行为模式 中介者模式 职责链模式 观察者模式 工厂模式 描述: 通过不同的typ...

  • 设计模式之十七——中介者模式

    原文传送门 1 介绍 中介者模式又称为调停者模式,它是一种对象行为型模式。 1.1 什么是中介者模式 用一个中介对...

网友评论

      本文标题:行为模式之中介者模式

      本文链接:https://www.haomeiwen.com/subject/qkgructx.html