仍然先来说明一下何为外观模式,一个复杂的系统包含很多子系统,为了使用这个复杂的系统,我们定义一个统一的接口来使用这个复杂的系统。当用户操作的时候只要调用我们提供的这个接口就好了,至于底层的这个复杂的系统,用户不必关系是如何工作的。这里列举一个网上的例子,编译系统是一个复杂的系统,包括什么词法分析,语法分析,语义分析等等,用户在编译程序的时候不需要了解这个复杂的系统到底是怎么编译的,只要使用统一的接口编译就可以了,代码如下:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <string>
using
namespace
std;
//代码扫描读入
class
CCodeScanner
{
public
:
void
Scan()
{
cout <<
"scan code"
<< endl;
}
};
//语法分析
CCodeParser
{
:
Parse()
{
"parse code"
<< endl;
}
};
CCodeGenerator
{
:
Generate()
{
"generate code"
<< endl;
}
};
//Facade
CCompiler
{
:
//更高层的统一接口
Compile()
{
"compile program…"
<< endl;
CCodeScanner scanner;
scanner.Scan();
CCodeParser parser;
parser.Parse();
CCodeGenerator generator;
generator.Generate();
}
};
int
main()
{
CCompiler compiler;
compiler.Compile();
return
0;
}
|
一个相似的例子。
cpu {
public
void
freeze() { ... }
jump(
long
position) { ... }
execute() { ... }
}
Memory {
load(
position,byte[] data) { ... }
}
HardDrive {
byte[] read(
lba,
size) { ... }
}
/* Facade */
Computer {
Memory memory;
HardDrive hardDrive;
Computer() {
.memory =
Memory();
.hardDrive =
HardDrive();
}
startComputer() {
cpu.freeze();
memory.load(BOOT_ADDRESS,hardDrive.read(BOOT_SECTOR,SECTOR_SIZE));
cpu.jump(BOOT_ADDRESS);
cpu.execute();
}
}
/* Client */
You {
static
main(String[] args) {
Computer facade =
Computer();
facade.startComputer();
}
猜你在找的Cocos2d-x相关文章 |