制作网站需要什么语言,app技术策划怎么写,权威网站设计,环境艺术设计网站推荐智能家庭项目1)智能家庭包括各种设备#xff0c;闹钟、咖啡机、电视机、窗帘等2)主人要看电视时#xff0c;各个设备可以协同工作#xff0c;自动完成看电视的准备工作#xff0c;比如流程为 #xff1a;闹铃响起 - 》咖啡机开始做咖啡 -》窗帘自动落下 -》电视机开始播放…智能家庭项目1)智能家庭包括各种设备闹钟、咖啡机、电视机、窗帘等2)主人要看电视时各个设备可以协同工作自动完成看电视的准备工作比如流程为 闹铃响起 - 》咖啡机开始做咖啡 -》窗帘自动落下 -》电视机开始播放传统方案解决智能家庭管理问题1)当各电器对象有多种状态改变时相互之间的调用关系会比较复杂。2)各个电器对象彼此联系你中有我我中有你不利于松耦合。3)各个电器对象之间所传递的消息(参数)容易混乱4)当系统增加一个新的电器对象时或者执行流程改变时代码的可维护性、扩展性都不理想。中介者模式基本介绍1)中介者模式(Mediator Pattern)用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用从而使其耦合松散而且可以独立地改变它们之间的交互。2)中介者模式属于行为型模式使代码易于维护。3)比如MVC模式C(Controller控制器)是M(Model模型)和V(View视图)的中介者在前后端交互时起到来中间人的作用。中介者模式的原理类图对原理类图的说明 1)Mediator 就是抽象中介者定义类同事对象到中介者对象的接口。2)Colleague 是抽象同事类。3)ConcreteMediator 具体的中介者对象实现抽象方法他需要知道所有的具体的同事类即以一个集合来管理HashMap并接收某个同事对象消息完成相应的任务。4)ConcreteColleague 具体的同事类会有很多每个同事只知道自己的行为而不了解其他同事类的行为(方法)但是他们都是依赖中介者对象。中介者模式 - 智能家庭的操作流程创建ConcreMediator 对象创建各个同事类对象比如 Alarm、CoffeeMachine、TV在创建同事类对象的时候就直接通过构造器加入到colleagueMap同事类对象可以调用sendMessage最终会去调用ConcreteMediator的getMessage方法getMessage 会根据接收到的同事对象发出的消息来协调调用其他的同事对象完成任务可以看到getMessage 是核心方法完成相应任务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);}Overridepublic void SendMessage(int stateChange) {// TODO Auto-generated method stub//调用的中介者对象的 getMessagethis.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 stubmediator.Register(name, this);}Overridepublic void SendMessage(int stateChange) {// TODO Auto-generated method stubthis.GetMediator().GetMessage(stateChange, this.name);}public void StartCoffee() {System.out.println(Its 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 stubmediator.Register(name, this);}Overridepublic void SendMessage(int stateChange) {// TODO Auto-generated method stubthis.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 stubmediator.Register(name, this);}Overridepublic void SendMessage(int stateChange) {// TODO Auto-generated method stubthis.GetMediator().GetMessage(stateChange, this.name);}public void StartTv() {// TODO Auto-generated method stubSystem.out.println(Its time to StartTv!);}public void StopTv() {// TODO Auto-generated method stubSystem.out.println(StopTv!);}}package com.example.demo.mediator;import java.util.HashMap;public class ConcreteMediator extends Mediator {//集合放入所有的同事对象private HashMap colleagueMap;private HashMap interMap;public ConcreteMediator() {colleagueMap new HashMap();interMap new HashMap();}Overridepublic void Register(String colleagueName, Colleague colleague) {colleagueMap.put(colleagueName, colleague);// TODO Auto-generated method stubif (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. 中介者在这个方法协调各个具体的同事对象完成任务Overridepublic 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) {//如果是以窗帘发出的消息这里处理...}}Overridepublic 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 对象的 HashMapAlarm alarm new Alarm(mediator, alarm);//创建了 CoffeeMachine 对象并 且加入到 ConcreteMediator 对象的 HashMapCoffeeMachine coffeeMachine new CoffeeMachine(mediator,coffeeMachine);//创建 Curtains , 并 且加入到 ConcreteMediator 对象的 HashMapCurtains curtains new Curtains(mediator, curtains);TV tV new TV(mediator, TV);//让闹钟发出消息alarm.SendAlarm(0);coffeeMachine.FinishCoffee();alarm.SendAlarm(1);}}中介者模式的注意事项和细节1)多个类相互耦合会形成网站结构使用中介者模式将网状结构分离为星型结构进行解耦。2)减少类间依赖降低类耦合符合迪米特法则。3)中介者承担类较多的责任一旦中介者出现了问题整个系统就会受到影响。4)如果设计不当中介者对象本身变得过于复杂这点在实际使用时要特别注意。