| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #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;
- }
|