从FrameWork的角度看Creational Pattern

 
假设程序开发分成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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值