类对象Java设计模式之十八(中介者模式)

PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

    一、什么是中介者模式

   Mediator模式也叫中介者模式,是由GoF提出的23种件软计划模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被同一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着制控器的作用。

    

    二、中介者模式的结构

    

    

    三、中介者模式的角色和职责

    mediator 中介者类的抽象父类。

    
concreteMediator  详细的中介者类。

    
colleague  关联类的抽象父类。

    
concreteColleague 详细的关联类。

    

    四、中介者模式的点优

    1,将系统按功能分割成更小的对象,符合类的最小计划则原

    2,对关联对象的会合制控

    3,减小类的合耦度程,确明类之间的相互系关:当类之间的系关过于庞杂时,其中任何一个类的修改会都影响到其他类,不符合类的计划的开闭则原 ,而Mediator模式将本来相互依存的多对多的类之间的系关简化为Mediator制控类与其他关联类的一对多的系关,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也会合在Mediator制控类)。

    4,有利于高提类的重用性

    

    代码现实:

    mediator (抽象类略省):

package com.qianyan.mediator;

public class Mediator {

	private Man man;
	private Woman woman;
	
	public void setMan(Man man) {
		this.man = man;
	}
	public void setWoman(Woman woman) {
		this.woman = woman;
	}
	
	public void getPartner(Person person) {
		//设置对方信息
		if(person instanceof Man)
			this.setMan((Man) person);
		else
			this.setWoman((Woman) person);
		
		//断判相配度
		if(this.man == null || this.woman == null)
			System.out.println("汗,我不是同性恋");
		else{
			if(this.man.getCondition() == this.woman.getCondition())
				System.out.println(this.man.getName() + "和" + this.woman.getName() + "绝配");
			else
				System.out.println(this.man.getName() + "和" + this.woman.getName() + "不相配");
		}
	}
}

    colleague:

    每日一道理
巴尔扎克说过“不幸,是天才的进升阶梯,信徒的洗礼之水,弱者的无底深渊”。风雨过后,眼前会是鸥翔鱼游的天水一色;走出荆棘,前面就是铺满鲜花的康庄大道;登上山顶,脚下便是积翠如云的空蒙山色。 在这个世界上,一星陨落,黯淡不了星空灿烂,一花凋零,荒芜不了整个春天。人生要尽全力度过每一关,不管遇到什么困难不可轻言放弃。
package com.qianyan.mediator;

public abstract class Person {
	
	private String name;
	private int condition;
	private Mediator mediator;
	
	public Person(String name, int condition, Mediator mediator) {
		this.name = name;
		this.condition = condition;
		this.mediator = mediator;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getCondition() {
		return condition;
	}
	public void setCondition(int condition) {
		this.condition = condition;
	}
	public Mediator getMediator() {
		return mediator;
	}
	public void setMediator(Mediator mediator) {
		this.mediator = mediator;
	}
	
	public abstract void getPartner(Person person);
	
}

    concreteColleague:

package com.qianyan.mediator;

public class Man extends Person {

	public Man(String name, int condition, Mediator mediator) {
		super(name, condition, mediator);
	}

	//1、中介注册  2、中介配匹
	public void getPartner(Person person) {
		this.getMediator().setMan(this);
		this.getMediator().getPartner(person);
	}

}
package com.qianyan.mediator;

public class Woman extends Person {

	public Woman(String name, int condition, Mediator mediator) {
		super(name, condition, mediator);
	}

	//1、中介注册  2、中介配匹
	public void getPartner(Person person) {
		this.getMediator().setWoman(this);
		this.getMediator().getPartner(person);
	}

}

    试测类:

package com.qianyan.mediator;

public class MainClass {

	public static void main(String[] args) {
		Mediator mediator = new Mediator();
		
		Person zhangsan = new Man("张三", 3, mediator);
		Person lisi = new Man("李四", 1, mediator);
		Person xiaofang = new Woman("小芳", 3, mediator);
		
		zhangsan.getPartner(lisi);
		zhangsan.getPartner(xiaofang);
		lisi.getPartner(xiaofang);
	}
}

    试测结果:

汗,我不是同性恋
张三和小芳绝配
李四和小芳不相配

文章结束给大家分享下程序员的一些笑话语录: 看到有人回帖“不顶不是中国人”,他的本意是想让帖子沉了。

posted @ 2013-04-26 19:16  坚固66  阅读(147)  评论(0编辑  收藏  举报