我怎样才能用单例模式解决状态模式 class
How can i tackle State Pattern with Singleton pattern in one class
我正在使用 .NET
框架练习编程,我真的对 Singleton pattern
和 State pattern
感到困惑。我尝试使用单例模式,现在如何将状态模式实现到相同的 class。我的代码是 BankAccount
,它自动实现了 属性 即 AccountStateID
public class BronzeState : AccountStates
{
//static member
private static BronzeState bronzeState;
//constructor
private BronzeState()
{
this.LowerLimit = 0;
this.UpperLimit = 5000;
this.Rate = 0.01 / 100;
}
public static BronzeState GetInstance()
{
if (bronzeState != null)
return bronzeState;
else
{
bronzeState = new BronzeState();
return bronzeState;
}
}
public void StateChangeCheck(BankAccount bankAccount)
{
if (bankAccount.Balance > UpperLimit)
{
bankAccount.AccountState = new SilverState();
}
}
}
//same goes with GoldSte , SilverState, PlatinumState.
我唯一的问题是,如果余额超过上限,我如何使用状态模式来更改状态。
如果所有 class 继承自 AccountStates
是单身吗?如果是,并且您使用了与上述相同的模式,则:
public void StateChangeCheck(BankAccount bankAccount)
{
if (bankAccount.Balance > UpperLimit)
{
bankAccount.AccountState = SilverState.GetInstance();
}
}
此外,如果您有兴趣了解有关单例线程安全实例化的更多信息,请查看 MSDN
我正在使用 .NET
框架练习编程,我真的对 Singleton pattern
和 State pattern
感到困惑。我尝试使用单例模式,现在如何将状态模式实现到相同的 class。我的代码是 BankAccount
,它自动实现了 属性 即 AccountStateID
public class BronzeState : AccountStates
{
//static member
private static BronzeState bronzeState;
//constructor
private BronzeState()
{
this.LowerLimit = 0;
this.UpperLimit = 5000;
this.Rate = 0.01 / 100;
}
public static BronzeState GetInstance()
{
if (bronzeState != null)
return bronzeState;
else
{
bronzeState = new BronzeState();
return bronzeState;
}
}
public void StateChangeCheck(BankAccount bankAccount)
{
if (bankAccount.Balance > UpperLimit)
{
bankAccount.AccountState = new SilverState();
}
}
}
//same goes with GoldSte , SilverState, PlatinumState.
我唯一的问题是,如果余额超过上限,我如何使用状态模式来更改状态。
如果所有 class 继承自 AccountStates
是单身吗?如果是,并且您使用了与上述相同的模式,则:
public void StateChangeCheck(BankAccount bankAccount)
{
if (bankAccount.Balance > UpperLimit)
{
bankAccount.AccountState = SilverState.GetInstance();
}
}
此外,如果您有兴趣了解有关单例线程安全实例化的更多信息,请查看 MSDN