java设计模式进阶_mediator

原创 2016年08月29日 16:19:50

这里写图片描述

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : PartyMember.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




/**
 * PartyMember
**/
public interface PartyMember {
    public void joinedParty(Party party);
    public void partyAction(Action action);
    public void act(Action action);
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : PartyMemberBase.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




/**
 * PartyMemberBase
**/
public abstract class PartyMemberBase implements PartyMember {
    protected Party party;

    public void joinedParty(Party party) {
        System.out.println(this + " joins the party");
        this.party = party;
    }

    public void partyAction(Action action) {
        System.out.println(this + " " + action.getDescription());
    }

    public void act(Action action) {
        if(party != null)
        {
            System.out.println(this + " " + action.toString());
            party.act(this,action);
        }
    }

    public abstract String toString();
}


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Hobbit.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




/**
 * Hobbit
**/
public class Hobbit extends PartyMemberBase {

    public String toString() {
        return "Hobbit";
    }

}
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Rogue.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




/**
 * Rogue
**/
public class Rogue extends PartyMemberBase {

    public String toString() {
        return "Rogue";
    }

}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Wizard.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




/**
 * Wizard
**/
public class Wizard extends PartyMemberBase {

    public String toString() {
        return "Wizard";
    }

}
//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Hunter.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




/**
 * Hunter
**/
public class Hunter extends PartyMemberBase {

    public String toString() {
        return "Hunter";
    }

}
//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Party.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




/**
 * Party
**/
public interface Party {
    public void addMember(PartyMember partyMember);
    public void act(PartyMember partyMember, Action action);
}

import java.util.ArrayList;
import java.util.List;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : PartyImpl.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




/**
 * PartyImpl
**/
public class PartyImpl implements Party {

    private final List<PartyMember> members;

    public PartyImpl() {
        members = new ArrayList<>();
    }

    public void act(PartyMember actor, Action action) {
        for(PartyMember member : members)
        {
            if(member != actor)
            {
                member.partyAction(action);
            }
        }
    }

    public void addMember(PartyMember member) {
        members.add(member);
        member.joinedParty(this);
    }

}

public enum Action {

    HUNT("hunted a rabbit","arrives for dinner"),
    TALE("tells a tale","comes to listen"),
    GOLD("found gold","takes his share of the gold"),
    ENEMY("spotted enemies","runs for cover"),
    NONE("","");

    private String title;
    private String description;

    Action(String title,String description)
    {
        this.title = title;
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    @Override
    public String toString() {
        return title;
    }

}
public class App {

    public static void main(String[] args) {

        //create party and members
        Party party = new PartyImpl();
        Hobbit hobbit = new Hobbit();
        Wizard wizard = new Wizard();
        Rogue rogue = new Rogue();
        Hunter hunter = new Hunter();

        //add party members
        party.addMember(hobbit);
        party.addMember(wizard);
        party.addMember(rogue);
        party.addMember(hunter);

        //perform actions -> the other party members
        //are notified by the party
        hobbit.act(Action.ENEMY);
        wizard.act(Action.TALE);
        rogue.act(Action.GOLD);
        hunter.act(Action.HUNT);

    }

}
/*
Hobbit joins the party
Wizard joins the party
Rogue joins the party
Hunter joins the party
Hobbit spotted enemies
Wizard runs for cover
Rogue runs for cover
Hunter runs for cover
Wizard tells a tale
Hobbit comes to listen
Rogue comes to listen
Hunter comes to listen
Rogue found gold
Hobbit takes his share of the gold
Wizard takes his share of the gold
Hunter takes his share of the gold
Hunter hunted a rabbit
Hobbit arrives for dinner
Wizard arrives for dinner
Rogue arrives for dinner

*/






版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA设计模式-Mediator

中介模式实际就像是房屋中介一样,中介维护了一个列表,这个列表包含了各个客户的房屋信息,当某一个客户的房屋信息有了改变之后,这个中介就负责通知自己维护的那个列表中的所有用户某某某进行了改变。    ...

JAVA设计模式(14):行为型-中介者模式(Mediator)

场景 假如没有总经理。下面三个部门:财务部、市场部、研发部。财务部要发工资,让大家核对公司需要市场需要跟市场部和研发部通气;市场部需要接个新项目,需要研发部处理技术、需要财务部出资金。市场部跟各个部门...

设计模式学习笔记--中介者模式Mediator pattern(Java版)

一、场景 公司里各个部门的总经理 二、实质 如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这种对象为“同事对象”。 我们可以引入一个中介者对象,使...

Java开发中的23种设计模式详解----中介者模式(Mediator)

中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系...
  • sjyttkl
  • sjyttkl
  • 2017年06月21日 16:32
  • 126

【Java设计模式】· 调停者模式(Mediator Pattern)

调停者/中介者模式: 1.当多个对象需要互相交互的时候,因为情况太混乱很容易出错,而且出错后也不容易去查复修改(因为可能一个类中调用了多个其他类的方法等..),这时候需要用到调停者模式。 2....
  • ReusLi
  • ReusLi
  • 2015年08月10日 13:04
  • 419

Java面向对象设计模式(二十二)——中介者模式(Mediator)

相关文档总结:Java面向对象设计模式 中介者模式(Mediator)         中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展...

浅谈JAVA设计模式之——中介者模式(Mediator)

一、概述 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 二、适用性 1.一组对象以定义良好但是复杂的方式进行通信。产生...

JAVA设计模式之 中介者模式【Mediator Pattern】

一、概述     用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象...

JAVA设计模式(14):行为型-中介者模式(Mediator)

腾讯公司推出的QQ作为一款免费的即时聊天软件深受广大用户的喜爱,它已经成为很多人学习、工作和生活的一部分(不要告诉我你没有QQ哦,)。在QQ聊天中,一般有两种聊天方式:第一种是用户与用户直接聊天,第二...

java设计模式--mediator 中介者模式

Mediator中介者模式,当多个对象彼此间都有联系的时候,我们就可以应用Mediator将对象间的多对多关系转换为一对多的关系,这样做,可以使各个对象间的耦合松散。统一管理对象间的交互。但也可能使得...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式进阶_mediator
举报原因:
原因补充:

(最多只允许输入30个字)