是否有人认为将完整对象作为变量传递,而不仅仅是指向完整对象的函数的指针?
例如,我有一个Dice对象,它有两个方法:
现在,我需要利用骰子不仅仅是玩家移动,其他对象也需要能够看到骰子。现在,在我看来,将整个骰子对象传递给其他对象似乎是错误的,因为那样的话,这些对象就可以“从技术上”重新滚动骰子了。只将GetCount函数指针传递给这些其他对象是好的还是坏的?本质上说,“我不会给你骰子,但我会教你如何阅读。”
有什么想法?
发布于 2011-03-22 04:05:18
使用观测器模式(GoF)似乎是一个很好的机会;
public class Dice
{
private List<IDiceObserver> observers;
public void RegisterObserver(IDiceObserver observer)
{
this.observers.Add(observer);
}
private Int32 count;
public Int32 Count
{
get
{
return this.count;
}
private set
{
this.count = value;
foreach (IDiceObserver observer in this.observers)
observer.DiceRolled(new DiceParameters(this.count));
}
}
public void RollDice()
{
this.Count = new Random(DateTime.Now.Millisecond).Next();
}
public Dice()
{
this.observers = new List<IDiceObserver>();
}
}是否需要进一步解释模式或其他类实现?
发布于 2011-03-22 03:55:45
你为什么不给他们一个整数呢?这意味着它们与骰子脱钩。
如果您使用依赖项注入将骰子注入到服务对象中,则创建一个只包含GetCount()方法的接口。
发布于 2011-03-22 03:56:40
您可以为骰子创建一个包装类,使它们不可变。包装器可以通过委托实现,也可以通过子类和重写RollDice()来实现。然后,当您想要保证它不会改变时,传递一个包装器对象而不是一个可变的Dice对象。
https://stackoverflow.com/questions/5386572
复制相似问题