写作方法:
一般用于异步通讯
1. 定义ObServer类
定义允许调用的虚函数,保护其他函数使不可见。
只进行定义不是先具体方法
class MDBEngineObserver
{
public:
virtual void UpdateState(TInt iState)=0;
};
2. Subject类
a) 调用ObServer类(异步触发事件的类),修改new入口参数(构造函数入口要带参数)
static CBookstoreDb* NewL(Observer& aObserver);
static CBookstoreDb* NewLC(Observer& aObserver);
CBookstoreDb(Observer& aObserver);
~CBookstoreDb();
b) 定义私有ObServer变量,用于调用虚拟函数
private:
MDBEngineObserver& iObserver;
c) 在构造函数初始化的同时初始化ObServer变量
:iObserver(aObserver)
d) 在需要的地方调用iObServer->UpdateState();
3. 主程序
以Symbian的AppUI类为例,首先要继承Observer,然后实现该类的虚拟函数,如:UpdateState()。new出Subject类,并将自身作为指针传递给Subject类。
本文主要内容是观察者设计模式的程序实现方法。函数的调用其实就是通过ui类的指针实现的,我认为使用该模式主要目的是保护AppUI类其他成员不可见,不可调用。
一般用于异步通讯
1. 定义ObServer类
定义允许调用的虚函数,保护其他函数使不可见。
只进行定义不是先具体方法
class MDBEngineObserver
{
public:
virtual void UpdateState(TInt iState)=0;
};
2. Subject类
a) 调用ObServer类(异步触发事件的类),修改new入口参数(构造函数入口要带参数)
static CBookstoreDb* NewL(Observer& aObserver);
static CBookstoreDb* NewLC(Observer& aObserver);
CBookstoreDb(Observer& aObserver);
~CBookstoreDb();
b) 定义私有ObServer变量,用于调用虚拟函数
private:
MDBEngineObserver& iObserver;
c) 在构造函数初始化的同时初始化ObServer变量
:iObserver(aObserver)
d) 在需要的地方调用iObServer->UpdateState();
3. 主程序
以Symbian的AppUI类为例,首先要继承Observer,然后实现该类的虚拟函数,如:UpdateState()。new出Subject类,并将自身作为指针传递给Subject类。
本文主要内容是观察者设计模式的程序实现方法。函数的调用其实就是通过ui类的指针实现的,我认为使用该模式主要目的是保护AppUI类其他成员不可见,不可调用。