行为模式之中介者模式

2019-09-19  本文已影响0人  后来丶_a24d

总则

中介者模式

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

    }
上一篇 下一篇

猜你喜欢

热点阅读