OGRE的实例框架相比FactoryMethod更像Bridge模式(含工厂模式)

OGRE的实例框架为Bridge模式,且看分析(读者首先要了解什么是Bridge)模式:
SkeletalAnimation 继承了SdkSample,SdkSample继承了Sample,Sample继承了Ogre::GeneralAllocatedObject,但Sample作为所有例子子类的抽象。

SampleContext继承了各种事件监听类接口,关联管理了Sample接口逻辑,包括例子的启动/加载插件逻辑/加载资源/整个场景的渲染 搭建了框架。

SampleBrowser继承了SampleContext,实现了更多具体的方法,包括实例的界面选择,和实例的跳转。

所以OGRE的实例框架,其实就是经典的Bridge模式。

OGRE的实例框架虽然从创建的角度来看像工厂方法FactoryMothod模式,根据用户选择产品然后用工厂方法将产品创建出来;但是SampleContext类是通过基类关联使SdkSample类的,且用了太多SdkSample类的实现逻辑,比如setup,frameRenderingQueued,keyPressed, saveState等更像是对实现功能的调用,而不是创建的调用;所以相比于FactoryMethod /模式,更像是Bridge模式

SimpleFactory是一个对象管理类根据传进来的对象标识来创建相应的对象;FactoryMethod是对象管理类(工厂类)在不同的维度或领域有更多的划分,因此抽象出一个工厂基类,工厂子类负责具体的创建产品,产品也是有自己的基类和子类;AbstactFactory是有多个抽象工厂,和多个抽象产品,是拥有众多种类对象,和众多种类的对象管理器时候才使用。


Bridge模式是将抽象部分与实现部分分离,使它们都可以独立的变化。它是一种结构性模式,又称柄体(Handle and body)模式或者接口(Interface)模式。

Bridge模式UML:

桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。 Stragey模式是对外接口聚合了算法实现类(算法实现类可以互换),对外接口没有自身的维度子类。

Bridge模式适用性:

1). 你不希望在抽象和他的实现部分之间有一个固定的邦定关系,如在程序的运行时刻实现部分应该可以被选择或者切换。

2). 类的抽象以及他的视像都可以通过生成子类的方法加以扩充。这时bridge模式使你可以对不同的抽象接口

      和实现部分进行组合,并对他们进行扩充。

3). 对一个抽象的实现部分的修改应该对客户不产生影响,即客户的代码不需要重新编译。

4). 你想对客户完全隐藏抽象的实现部分。

5). 你想在多个实现间 共享实现,但同时要求客户并不知道这一点。

桥接模式与其他相关模式

1)抽象工厂(Abstract Factory )

抽象工厂模式可以用来创建和配置一个特定的Bridge模式,抽象工厂比Bridge的Implement有更多的抽象Product,且工厂是通过子类和产品子类关联。

2)装饰模式:

      这两个模式在一定程度上都是为了减少子类的数目,避免出现复杂的继承关系。但是它们解决的方法却各有不同,

装饰模式把子类中比基类中多出来的部分放到单独的类里面,以适应新功能增加的需要,当我们把描述新功能的类封装到

基类的对象里面时,就得到了所需要的子类对象,这些描述新功能的类通过组合可以实现很多的功能组合 .

3 Strategy模式

Bridge模式是抽象接口逻辑,实现基类子类逻辑实现,通过抽象接口聚合关联实现基类,在两个模块子类间进行桥接搭配统一接口。而Strategy模式调用方式没有抽象接口的。

更多具体见:http://blog.csdn.net/hguisu/article/details/7529194

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值