我目前在项目中有两个解决方案。 解决方案1是GameEngine 解决方案2基本上是前端冒险
为了从GameEngine库访问类,使用了Singleton设计方法,因此我可以访问我的库存类,例如使用GameEngine.Instance.Inventory。
然而,现在这里添加了很多代码,每次执行GameEngine.Instance,有没有办法可以调用方法或返回,所以我可以简单地引用Inventory,它将返回GameEngine.Instance.Inventory班而不是?基本上是捷径。
提前谢谢:)
答案 0 :(得分:4)
一种方法是设置属性:
public GameEngine.Inventory Inventory
{
get { return GameEngine.Instance.Inventory; }
}
现在,您可以在整个类中使用Inventory
来引用您的单例对象。但是,这仅适用于特定类别。
另外,根据@Leri的评论,这种迁移(可能不会)影响性能。
答案 1 :(得分:3)
使用静态属性:
private static GameEngine.Inventory _inventory;
public static GameEngine.Inventory Inventory
{
get {
if (_inventory == null) {
_inventory = GameEngine.Instance.Inventory;
}
return _inventory;
}
}
答案 2 :(得分:1)
如果您的单例实例永远不会更改,您可以安全地为该实例使用变量:
var i = GameEngine.Instance;
然后用它:
i.Inventory
答案 3 :(得分:1)
您还可以添加静态方法,以便可以通过整个项目访问
public static ClsInventory GetInventory()
{
return GameEngine.Instance.Inventory;
}
答案 4 :(得分:0)
我想补充答案。他们都正确地回答了你的问题,我全部投了赞成票。但是,我建议不要使用单例,而是尝试将您的aproach更改为注入依赖项以访问“全局”实例。
当您想要访问其他(全局)对象而不是库存时会发生什么?您必须向GameEngine添加另一个属性。您的引擎将成为Frankestain,其中有许多属性属于游戏引擎内部实例。这违反了单一的责任模式。
此外,当您想要对游戏进行单元测试时,您必须为每个测试/装置设置整个GameEngine。 IOD还可以帮助您解耦代码。