#include "MediatorDisplay.h" //这里如果直接让左右互相同步,互相影响,可能导致混乱。需要一个中间调停者模式,作为中间人去控制同步消息 //中介者模式意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 //主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。 //之前不使用该模式时,左右显示同步互相交互,时而发生消息混乱 MediatorDisplay::MediatorDisplay():QObject(nullptr) { m_leftLineNum = 0; m_rightLineNum = 0; m_leftScrollValue = 0; m_rightScrollValue = 0; } MediatorDisplay::~MediatorDisplay() { } void MediatorDisplay::setLeftNum(int value) { m_leftLineNum = value; if (m_leftLineNum != m_rightLineNum) { emit syncCurLineNum(0); } } void MediatorDisplay::setRightNum(int value) { m_rightLineNum = value; if (m_leftLineNum != m_rightLineNum) { emit syncCurLineNum(1); } } int MediatorDisplay::getLeftNum() { return m_leftLineNum; } int MediatorDisplay::getRightNum() { return m_rightLineNum; } void MediatorDisplay::setLeftScrollValue(int value) { if (m_leftScrollValue != value) { m_leftScrollValue = value; } //如果左右不相等,则推动对方去同步 if (m_leftScrollValue != m_rightScrollValue) { emit syncCurScrollValue(0); } } void MediatorDisplay::setRightScrollValue(int value) { if (m_rightScrollValue != value) { m_rightScrollValue = value; } if (m_leftScrollValue != m_rightScrollValue) { emit syncCurScrollValue(1); } } int MediatorDisplay::getLeftScrollValue() { return m_leftScrollValue; } int MediatorDisplay::getRightScrollValue() { return m_rightScrollValue; } void MediatorDisplay::setLeftScrollXValue(int value) { if (m_leftScrollXValue != value) { m_leftScrollXValue = value; } //如果左右不相等,则推动对方去同步 if (m_leftScrollXValue != m_rightScrollXValue) { emit syncCurScrollXValue(0); } } void MediatorDisplay::setRightScrollXValue(int value) { if (m_rightScrollXValue != value) { m_rightScrollXValue = value; } if (m_leftScrollXValue != m_rightScrollXValue) { emit syncCurScrollXValue(1); } } int MediatorDisplay::getLeftScrollXValue() { return m_leftScrollXValue; } int MediatorDisplay::getRightScrollXValue() { return m_rightScrollXValue; }