mpe*_*pen 2 c++ qt design-patterns box2d
我想我以前曾问过几个类似的问题,但我在灌木丛中殴打.我认为这是我无法安息的真正问题.
我正在处理第三方库,而且有一个无法创建的对象,b2Body.该b2World有实例化它.我个人不太喜欢这种设计模式; 我认为它b2Body应该能够独立于世界而存在,然后在需要时被添加到世界.无论如何,我已经用b2Body自己的班级包装了Body,因为无论如何我需要添加一些额外的东西.同样,我有一个World包装器.现在我想我有3个选择:
Body的构造函数接受一个指针,World以便它可以完全实例化(b2World::CreateBody在内部调用) - 即具有类似的构造函数Body *b = new Body(world_ptr)Body给某些World::CreateBody方法,比如图书馆已经如何做到了 - 即Body *b = world.CreateBody(params);b2Body以便您可以随意使用它,然后在将其添加到世界后,它将"切换"以使用b2Body数据 - 即Body b稍后world.addBody(b).(1)和(2)意味着你不能Body没有a World,我可能不需要,但是拥有那个选项可能会很好[以便我可以将它用作其他对象的模板等].不确定有什么其他优点和缺点.(3)看起来更好,但实现起来要做的工作要多得多,这意味着我必须复制已经包含的大部分数据b2Body.
你的想法是什么?我会CW这样,所以没有人烦恼.
我仍然无法安息.这是每个选项的样子:
选项1 :(我更喜欢)
World w;
Body b;
Fixture f;
b.addFixture(f);
w.addBody(b);
Run Code Online (Sandbox Code Playgroud)
选项2 :(中间的某个地方)
World w;
Body b(w);
Fixture f(b);
Run Code Online (Sandbox Code Playgroud)
选项3 :( Box2D如何做到)
World *w = new World;
Body *b = w->CreateBody(args);
Fixture *f = b->CreateFixture(args);
Run Code Online (Sandbox Code Playgroud)
选项2和3没有那么不同,但它改变了谁可以控制创建对象.
我如何实际实现选项3?World::CreateBody()必须调用b2World::CreateBody(args)哪些调用b2Body::b2Body()和返回b2Body但从不调用Body::Body(args)哪个是问题.该b2Body会得到完全初始化,但我的包装有没有地方做的事情......更具体地说,我会怎么写World::CreateBody(const BodyDef &bd)?假设BodyDef继承自b2BodyDef,Body来自b2Body,World来自b2World等.
我想,如果你打算使用第三方库,如果你有更好的理由,你应该只打击它的设计哦,我不喜欢那种设计模式.你的图书馆有一种做事方式 - 显然,通过使用工厂对象 - 并且可能会大大增加你的代码复杂性.
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |