zoukankan      html  css  js  c++  java
  • 类对象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);
    	}
    }

        试测结果:

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

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

  • 相关阅读:
    简单的Vue示例
    Vue开发环境搭建基本操作
    2020CentOS官网下载镜像方法
    while((ch=getchar()) !=EOF && ch != ' ');语句作用
    Mac 下使用svn
    用树形结构递归渲染权限列表
    .net core中使用jwt进行认证
    C#中异步多线程的实现方式
    redis-避免生产环境使用keys命令
    让visual studio总是以管理员身份启动
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3045549.html
Copyright © 2011-2022 走看看