从FrameWork的角度看Creational Pattern

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

假设程序开发分成2层,第一层是FrameWork,第二层是Application。一个FrameWork可以在多个Application中使用。这样,FrameWork需要独立于Application,即FrameWork不应该需要看到Application的接口。

假设FrameWork需要使用到一个类AbstractA,Application以AbstractA为基类设计派生类ConcreteA。

1,如果ConcreteA对象是由Application创建(Create)的,那么只要使用继承就可以了。不同的Application设计不同的ConcreteA,把ConcreteA对象的指针或者引用作为AbstractA传递给FrameWork就可以了。

2,如果ConcreteA对象是需要FrameWork创建的,那么可以考虑FactoryMethod。不同的Application设计不同的ConcreteA,以及相应的ConcreteCreatorA。Application把ConcreteCreatorA对象的指针或者引用作为AbstactCreatorA传递给FrameWork,FrameWork通过AbstactCreatorA的FactoryMethod创建ConcreteA对象。

3,比FactoryMethod更进一步,如果Application中需要多个AbstractA的派生类,比如ConcreteA1,ConcreteA2,ConcreteAn。为了避免需要相应的同样多的ConcreteCreatorA1,ConcreteCreatorA2…ConcreteCreatorAn,可以考虑Prototype。这样,Application只需要一个ConcreteCreatorA就可以创建多个AbstractA的派生类对象ConcreteA1,ConcreteA2…ConcreteAn。

4,如果一系列的AbstractA,AbstractB…AbstractN,相应的派生类对象都需要FrameWork创建。可以考虑AbstractFactory。AbstractFactory中可以采取FactoryMethod,也可以采取Prototype。

5,一般来说,AbstractFactory中的ConcreteFactory经常是Singleton。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有