外观模式是比较简单的模式。它的目的也是为了简单。什么意思呢?举个例子吧。以前,我们逛街的时候吃要到小吃一条街,购物要到购物一条街,看书、看电影要到文化一条街。那么有没有这样的地方,既可以吃喝玩乐,同时相互又靠得比较近呢。其实,这就是悠闲广场,遍布全国的万达广场就是干了这么一件事。
首先,我们原来是怎么做的。
typedef struct _FoodSteet { void (*eat)(); }FoodStreet; void eat() {
printf("eat here!\n"); } typedef struct _ShopStreet { void (*buy)(); }ShopStreet; void buy() { printf("buy here!\n"); } typedef struct _BookStreet { void (*read)(); }BookStreet; void read() { printf("read here"); } |
下面,我们就要在一个plaza里面完成所有的项目,怎么办呢?
typedef struct _Plaza { FoodStreet* pFoodStreet; ShopStreet* pShopStreet; BookStreet* pBookStreet; void (*play)(struct _Plaza* pPlaza); }Plaza; void play(struct _Plaza* pPlaza) { assert(NULL != pPlaza); pPlaza->pFoodStreet->eat(); pPlaza->pShopStreet->buy(); pPlaza->pBookStreet->read(); } |
我们看到,容器有get_first,迭代器也有get_first,这中间有什么区别?
int vector_get_first(struct _Container* pContainer) { assert(NULL != pContainer);
return pContainer->pData[0]; }
int vector_get_last(struct _Container* pContainer) { assert(NULL != pContainer);
return pContainer->pData[pContainer->size -1]; }
int vector_interator_get_first(struct _Interator* pInterator) { Container* pContainer; assert(NULL != pInterator && NULL != pInterator->pVector);
pContainer = (struct _Container*) (pInterator->pVector); return pContainer ->get_first(pContainer); }
int vector_interator_get_last(struct _Interator* pInterator) { Container* pContainer;
assert(NULL != pInterator && NULL != pInterator->pVector);
pContainer = (struct _Container*) (pInterator->pVector); return pContainer ->get_last(pContainer); } |
看到上面的代码之后,我们发现迭代器的操作实际上也是对容器的操作而已。
|
|