Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 中介设计模式:为什么类必须通知中介他们的行为?_Java_Design Patterns_Methods_Mediator - Fatal编程技术网

Java 中介设计模式:为什么类必须通知中介他们的行为?

Java 中介设计模式:为什么类必须通知中介他们的行为?,java,design-patterns,methods,mediator,Java,Design Patterns,Methods,Mediator,在以下班级: public class Ignition { private EngineManagementSystem mediator; private boolean on; public Ignition(EngineManagementSystem mediator) { this.mediator = mediator; on = false; mediator.registerIgnition(th

在以下班级:

public class Ignition {
    private EngineManagementSystem mediator;
    private boolean on;

        public Ignition(EngineManagementSystem mediator) {
        this.mediator = mediator;
        on = false;
        mediator.registerIgnition(this);
    }

    public void start() {
        on = true;
        mediator.ignitionTurnedOn();
        System.out.println("Ignition turned on");
   }

    public void stop() {
        on = false;
        mediator.ignitionTurnedOff();
        System.out.println("Ignition turned off");
    }
    public boolean isOn() {
        return on;
    }} 
我不确定这些代码行的原因,例如:

mediator.ignitionTurnedOn()


为什么这个类需要调用这个方法来通知中介点火开关打开了?这是否意味着该方法将被调用两次?一旦使用此方法,然后在调解员内部?

调解员的目的是在同事之间传递信息。您只需将系统中其他同事需要知道的事情通知调解人

我敢说,在这个系统中,可能还有另一个类叫做
Engine
,它有一个
start()
方法也注册到了中介

Ignition
start方法调用
mediator.ignitionTurnedOn()
时,最有可能的情况是,中介然后从其
ignitionTurnedOn()方法内部调用类似
getEngine().start()
的内容


这里可能不会两次调用任何内容。

中介程序的目的是提供高度内聚的服务,允许将系统的元素解耦。就汽车而言,点火系统不需要知道发生了什么的细节,例如,阻风门打开,起动机启动等,因为这些细节可能会根据发动机系统的类型而改变

下面是可能发生的情况:

要确定这一点,您必须了解如何调用
:Ignition
,以及
Mediator.ignitionTurnedOn()
的实际功能