java设计模式之抽象工厂模式

来源:互联网 发布:阅读刷量软件 编辑:程序博客网 时间:2024/06/08 02:01

java设计模式参考文章:
Java设计模式实战,23种设计模式介绍以及在Java中的实现,Java设计模式, Java经典设计模式之五大创建型模式


## 定义 ##

Mediator模式也叫中介者模式,Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。

## 代码举例 ##

  • 联合国转发各国声明, 调停各国关系:
  • 各国向联合国安理会发送和接收消息, 安理会在各国间’适当地’转发请求以实现协作行为:
/** * @author bwx * @date 2017/11/28 * 抽象同事类 */public abstract class Country {    protected Mediator mediator;    private String name;    public Country(Mediator mediator, String name) {        this.mediator = mediator;        this.name = name;    }    public String getName() {        return name;    }    protected abstract void declare(String msg);    protected abstract void receive(String msg);}/** * @author bwx * @date 2017/11/28 * 具体同事类 */public class USA extends Country {    public USA(Mediator mediator, String name) {        super(mediator, name);    }    protected void declare(String msg) {        mediator.declare(this, msg);    }    protected void receive(String msg) {        System.out.println("美国接收到: [" + msg + "]");    }}/** * @author bwx * @date 2017/11/28 */public class China extends Country {    public China(Mediator mediator, String name) {        super(mediator, name);    }    protected void declare(String msg) {        mediator.declare(this, msg);    }    protected void receive(String msg) {        System.out.println("中国接收到: [" + msg + "]");    }}/** * @author bwx * @date 2017/11/28 * 抽象中介者 */public abstract class Mediator {    protected List<Country> countries = new LinkedList<Country>();    public void register(Country country) {        countries.add(country);    }    public void remove(Country country) {        countries.remove(country);    }    protected abstract void declare(Country country, String msg);}/** * @author bwx * @date 2017/11/28 * 具体中介者 */public class UnitedNations extends  Mediator {    /**     * 联合国在中间作出调停     * @param country     * @param msg     */    protected void declare(Country country, String msg) {        for (Country toCountry : countries) {            if (!toCountry.equals(country)) {                String name = country.getName();                toCountry.receive(name + "平和的说: " + msg);            }        }    }}/** * @author bwx * @date 2017/11/28 * 中介者模式 */public class Main {    public static void main(String[] args) {        Mediator mediator = new UnitedNations();        Country usa = new USA(mediator, "美国");        Country china = new China(mediator, "中国");        mediator.register(usa);        mediator.register(china);        usa.declare("我要打伊拉克, 谁管我跟谁急!!!");        System.out.println("----------");        china.declare("我们强烈谴责!!!");        System.out.println("----------");    }}

## 优点 ##

  • 两个类直接关联,是很好实现的,但如果不希望两个类直接发生交互,那么就需要使用中介者模式了。

具体请参考

原创粉丝点击