Ilustración intermediario modelar patrones de diseño de Java

proyecto Smart Home

1) incluye una variedad de dispositivos inteligentes para el hogar, reloj despertador, cafetera, televisión, cortinas, etc.
2) cuando el propietario para ver la televisión, dispositivos individuales pueden trabajar juntos, TV reloj automáticamente las preparaciones, tales como proceso: los sonidos de alarma - " se inicia la máquina de café para hacer café - "caída automática de la cortina -" juego de inicio de TV

Las soluciones tradicionales para la gestión inteligente del hogar

Aquí Insertar imagen Descripción
1) Cuando cada objeto con múltiples cambios de estado eléctricas, llamar las relaciones mutuas serían más complicadas.
2) el objeto de cada contacto eléctrico entre sí, me tienes, te tengo, no es propicio para débilmente acoplados.
3) mensaje (parámetro) eléctrica que pasa entre los diversos objetos, fácilmente dar lugar a confusión
4) Cuando el sistema añade un nuevo objeto eléctrico, o cuando se realiza un cambio de flujo, capacidad de mantenimiento de código, extensibilidad no es ideal.

Introducción básica modelo intermediario

1) El modelo intermediario (Patrón Mediador), con un objeto intermediario que encapsula un conjunto de objetos interactúan.
Mediador los respectivos objetos no se hace referencia explícitamente a la otra, de modo que imprecisa, y se puede cambiar independientemente de la interacción entre ellos.
2) modelo intermediario pertenece al tipo de modelo, haciendo que el código sea más fácil de mantener.
3) como patrón MVC, C (Controller Controller) es M (modelo Model) y V (Ver vista) del intermediario, intermediarios para jugar un papel cuando el extremo trasero de la interactúan frente.

Principio de diagrama de clases de modelo intermediario

Aquí Insertar imagen Descripción
ilustrativa diagrama de clases de los principios de:
1) extracto Mediador Mediador es definir una interfaz colegas clase de objeto para el objeto intermediario.
2) colega colega es una clase abstracta.
3) implementa el objeto específico ConcreteMediator intermediario del método abstracto, tiene que saber todo del tipo específico de compañeros de trabajo, que es un conjunto de HashMap gestión, y recibe un mensaje de objeto colega, para realizar la tarea.
4) ConcreteColleague clase colegas específicos, habrá muchos, cada uno de mis colegas sólo conocen su propio comportamiento, en lugar de entender el comportamiento (métodos) al igual que otros colegas, sino que dependen de un objeto intermediario.

Intermediario modelo - la familia inteligente de procedimientos operativos

Aquí Insertar imagen Descripción

  1. Objetos creados ConcreMediator
  2. Crear un compañero de clase de cada objeto, como por ejemplo: alarma, cafetera, TV
  3. Cuando se crea un objeto de compañeros de clase, directamente por el constructor, añadido a colleagueMap
  4. Colegas objeto de clase, puede llamar sendMessage, con el tiempo para llamar al método getMessage ConcreteMediator
  5. getMessage llamará a otros colegas para coordinar objetos en función de objeto recibe un mensaje colegas emitidas para completar la tarea
  6. GetMessage puede ver es el método básico, se termina su tarea
package com.example.demo.mediator;

public abstract class Mediator {

	//将给中介者对象,加入到集合中
	public abstract void Register(String colleagueName, Colleague colleague);
	//接收消息, 具体的同事对象发出
	public abstract void GetMessage(int stateChange, String colleagueName);
	public abstract void SendMessage();
}
package com.example.demo.mediator;

public abstract class Colleague {

	private Mediator mediator; 
	public String name;
	public Colleague(Mediator mediator, String name) {
		this.mediator = mediator; 
		this.name = name;
	}
	public Mediator GetMediator() { 
		return this.mediator;
	}
	public abstract void SendMessage(int stateChange);
}
package com.example.demo.mediator;

public class Alarm extends Colleague {

	public Alarm(Mediator mediator, String name) {
		super(mediator, name);
		// TODO Auto-generated constructor stub
		//在创建 Alarm 同事对象时,将自己放入到 ConcreteMediator 对象中[集合] 
		mediator.Register(name, this);
	}

	public void SendAlarm(int stateChange) { 
		SendMessage(stateChange);
	}
	
	@Override
	public void SendMessage(int stateChange) {
		// TODO Auto-generated method stub
		//调用的中介者对象的 getMessage 
		this.GetMediator().GetMessage(stateChange, this.name);
	}

}
package com.example.demo.mediator;

public class CoffeeMachine extends Colleague {

	public CoffeeMachine(Mediator mediator, String name) {
		super(mediator, name);
		// TODO Auto-generated constructor stub
		mediator.Register(name, this);
	}

	@Override
	public void SendMessage(int stateChange) {
		// TODO Auto-generated method stub
		this.GetMediator().GetMessage(stateChange, this.name);
	}
	
	public void StartCoffee() { 
		System.out.println("It's time to startcoffee!");
	}
	public void FinishCoffee() {
		System.out.println("After 5 minutes!"); 
		System.out.println("Coffee is ok!"); 
		SendMessage(0);
	}

}
package com.example.demo.mediator;

public class Curtains extends Colleague {

	public Curtains(Mediator mediator, String name) {
		super(mediator, name);
		// TODO Auto-generated constructor stub
		mediator.Register(name, this);
	}

	@Override
	public void SendMessage(int stateChange) {
		// TODO Auto-generated method stub
		this.GetMediator().GetMessage(stateChange, this.name);
	}
	
	public void UpCurtains() {
		System.out.println("I am holding Up Curtains!");
	}

}
package com.example.demo.mediator;

public class TV extends Colleague {

	public TV(Mediator mediator, String name) {
		super(mediator, name);
		// TODO Auto-generated constructor stub
		mediator.Register(name, this);
	}

	@Override
	public void SendMessage(int stateChange) {
		// TODO Auto-generated method stub
		this.GetMediator().GetMessage(stateChange, this.name);
	}
	
	public void StartTv() {
		// TODO Auto-generated method stub 
		System.out.println("It's time to StartTv!");
	}
	public void StopTv() {
		// TODO Auto-generated method stub 
		System.out.println("StopTv!");
	}

}
package com.example.demo.mediator;

import java.util.HashMap;

public class ConcreteMediator extends Mediator {
	
	//集合,放入所有的同事对象
	private HashMap<String, Colleague> colleagueMap; 
	private HashMap<String, String> interMap;

	public ConcreteMediator() {
		colleagueMap = new HashMap<String, Colleague>(); 
		interMap = new HashMap<String, String>();
	}

	@Override
	public void Register(String colleagueName, Colleague colleague) {
		colleagueMap.put(colleagueName, colleague);
		// TODO Auto-generated method stub
		if (colleague instanceof Alarm) { 
			interMap.put("Alarm", colleagueName);
		} else if (colleague instanceof CoffeeMachine) { 
			interMap.put("CoffeeMachine", colleagueName);
		} else if (colleague instanceof TV) { 
			interMap.put("TV", colleagueName);
		} else if (colleague instanceof Curtains) {
			interMap.put("Curtains", colleagueName); 
		}
	}

	//具体中介者的核心方法
	//1. 根据得到消息,完成对应任务
	//2. 中介者在这个方法,协调各个具体的同事对象,完成任务 
	@Override
	public void GetMessage(int stateChange, String colleagueName) {
		// TODO Auto-generated method stub
		//处理闹钟发出的消息
		if (colleagueMap.get(colleagueName) instanceof Alarm) {
			if (stateChange == 0) {
				((CoffeeMachine) (colleagueMap.get(interMap
						.get("CoffeeMachine")))).StartCoffee();
				((TV) (colleagueMap.get(interMap.get("TV")))).StartTv();
			} else if (stateChange == 1) {
				((TV) (colleagueMap.get(interMap.get("TV")))).StopTv();
			}
		 else if (colleagueMap.get(colleagueName) instanceof CoffeeMachine) { 
			 ((Curtains) (colleagueMap.get(interMap.get("Curtains")))).UpCurtains();
		 }
		} else if (colleagueMap.get(colleagueName) instanceof TV) {
			//如果 TV 发现消息
		} else if (colleagueMap.get(colleagueName) instanceof Curtains) { 
			//如果是以窗帘发出的消息,这里处理...
		}
	 
	}
	@Override
	public void SendMessage() {
		// TODO Auto-generated method stub 
	}

}
package com.example.demo.mediator;

import java.util.HashMap;

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建一个中介者对象
		Mediator mediator = new ConcreteMediator();
		//创建 Alarm 并且加入到 ConcreteMediator 对象的 HashMap 
		Alarm alarm = new Alarm(mediator, "alarm");
		//创建了 CoffeeMachine 对象,并 且加入到 ConcreteMediator 对象的 HashMap 
		CoffeeMachine coffeeMachine = new CoffeeMachine(mediator,"coffeeMachine");
		//创建 Curtains , 并 且加入到 ConcreteMediator 对象的 HashMap 
		Curtains curtains = new Curtains(mediator, "curtains");
		TV tV = new TV(mediator, "TV");
		//让闹钟发出消息 
		alarm.SendAlarm(0); 
		coffeeMachine.FinishCoffee();
		alarm.SendAlarm(1);
	}

}

Notas y detalles del modelo intermediario

1) una pluralidad de clases acoplados el uno al otro, se formará una estructura de sitio, el modelo intermediario estructura de malla se separa en la estructura de estrella, desacoplado.
2) reducir la dependencia entre dos clases, clase de acoplamiento reducida, el cumplimiento Demeter.
3) mediador responsable de la clase más, una vez que el mediador no es un problema, se verá afectado todo el sistema.
4) Si mal diseñada, propio objeto mediador vuelve demasiado complicado, esto es en el uso real, debe prestar especial atención.

Supongo que te gusta

Origin www.cnblogs.com/haizai/p/12622618.html
Recomendado
Clasificación