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). 你想在多个实现间 共享实现,但同时要求客户并不知道这一点。
抽象工厂模式可以用来创建和配置一个特定的Bridge模式,抽象工厂比Bridge的Implement有更多的抽象Product,且工厂是通过子类和产品子类关联。
这两个模式在一定程度上都是为了减少子类的数目,避免出现复杂的继承关系。但是它们解决的方法却各有不同,
装饰模式把子类中比基类中多出来的部分放到单独的类里面,以适应新功能增加的需要,当我们把描述新功能的类封装到
基类的对象里面时,就得到了所需要的子类对象,这些描述新功能的类通过组合可以实现很多的功能组合 .
3 Strategy模式Bridge模式是抽象接口逻辑,实现基类子类逻辑实现,通过抽象接口聚合关联实现基类,在两个模块子类间进行桥接搭配统一接口。而Strategy模式调用方式没有抽象接口的。
更多具体见:http://blog.csdn.net/hguisu/article/details/7529194