我正在使用flash develop和flash cs5在as3中制作游戏。一切都是面向对象的。我想知道,我应该有一个“网关”类,它具有对其他类的所有实例化的属性引用,我只是将此网关类传递给新对象,因此它们可以访问每个类。像这样:
var block:Block = new Block(gateway);
//In the block class:
this.gateway.player.setHealth(100);
//Or:
this.gateway.input.lock();
这是单身模式还是什么?我应该这样做吗?
答案 0 :(得分:2)
我已经将它用作单例 - 因此您不必担心可能会创建新版本的dataModel并引用空白对象。有点让你不停地搔头几个小时。 它看起来像这样:
package com.strangemother.models.DataModel
{
private static var _dataModel:DataModel;
/**
an example of storing you items.
*/
public var character:Character;
public static function getInstance():DataModel
{
if(!_dataModel)
{
_dataModel= new DataModel(SingletonLock);
return _dataModel;
}
public function DataModel(lock:Class)
{
if(!lock is SingletonLock)
{
throw new Error("DataModel is a singleton. Use DataModel.getInstance() to use.");
}
}
}
加入@AttackingHobo:
this is a one ( 1 ) this is the letter L lowercase ( l )
答案 1 :(得分:1)
可能是快速尝试某种方法的好方法,但从长远来看,网关对象将变得如此巨大,并且不同对象之间的关系如此之多以至于它将落在自身的重量之下。
此外,面向对象的一个方面是将代码的某些部分的访问封装到仅需要它的那些对象。
答案 2 :(得分:0)
这个概念叫做inversion of control。看起来你已经创建了service locator。还有其他方法可以实现控制反转,例如dependency injection。 Martin Fowler对整个概念有一个excellent article,你应该阅读它然后自己决定。