在讨论Cocos2d-x里面的委托模式之前,先来讲讲什么是委托,以及C++里面如何实现委托。委托通常还会跟回调、闭包联系在一起,而委托和委托模式也有一点区别。下面先看看委托模式的例子
一个打印机类的委托模式实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
class
RealPrinter{
//the"delegate"
public
:
void
print(){
//dosomething
}
};
Printer{
//the"delegator"
:
Printer():p(
new
RealPrinter()){}
//createthedelegate
print(){
p->print();
//delegation
}
~Printer(){
if
(NULL!=p){
delete
p;
p=NULL;
}
}
private
:
RealPrinter*p;
};
int
main()
{
Printer*p=
Printer;
//clientdon’tkNowtheexistsofdelegateclass
p;
}
|
Printer这个类要实现打印功能,它不是自己去实现,而是委托RealPrinter这个类来实现。更一般化的示例如下:
PrinterDelegate{
virtual
~PrinterDelegate(){}
//whyvirtualfunction,seeEffectivec++Item7.
virtual
print()=0;
};
RealPrinter:
PrinterDelegate{
//the"delegate"
:
print(){
//dosomething
}
};
Printer{
:
Printer():delegate(
RealPrinter){}
print(){
(NULL!=delegate){
delegate->print();
}
}
~Printer(){
(NULL!=delegate){
delegate;
delegate=NULL;
}
}
:
PrinterDelegate*delegate;
};
main()
{
Printer;
//clientdon’tkNowtheexistsofdelegateclass
p;
看完这个实现之后,相信大家对ObjC里面的delegate如何用c++实现也差不多有了解了吧。其实很简单,就是一个针对接口编程嘛。
相关推荐 |