У меня есть счет Chequing и сберегательный счет. Я изучаю, как реализовать метод вывода, используя шаблон стратегии.
В настоящее время чековая и сберегательная учетная запись наследуются от учетной записи. Для Сберегательного счета, снятие средств не должно приводить к падению баланса ниже 100 долларов. При использовании учетной записи Chequing для снятия средств необходимо указать номер чека.
Я не уверен в использовании этого подхода, потому что, как вы увидите ниже, параметр "otherArguments" совершенно бесполезен в одном сценарии. И единственная причина, по которой у меня это так, - «показать» использование шаблона стратегии.
(для тех, кто заинтересован, это часть школьного проекта, весь код ниже я написал, и мне интересно, есть ли лучший способ сделать это).
Вот что я сделал до сих пор:
public abstract class Account
{
public double Balance{get; set;}
public WithdrawStrategy Withdrawer
{
get; set;
}
public abstract void withdraw(double currentBalance, double amount, object otherArguments);
}
public class Chequing: Account
{
public Chequing()
{
Withdrawer= new ChequingAccountWithdrawer();
}
public override void withdraw(double currentBalance, double amount, object otherArguments)
{
if (null != Withdrawer)
{
double balance = Withdrawer.withdraw(currentBalance, amount, otherArguments);
Balance = balance;
}
}
}
public class Saving: Account
{
public Saving()
{
Withdrawer= new SavingAccountWithdrawer();
}
public override void withdraw(double currentBalance, double amount, object otherArguments)
{
if (null != Withdrawer)
{
double balance = Withdrawer.withdraw(currentBalance, amount, otherArguments);
Balance = balance;
}
}
}
public interface WithdrawStrategy
{
double withdraw(double currentBalance, double amount, object otherArguments);
}
public ChequingAccountWithdrawer: WithdrawStrategy
{
public double withdraw(double currentBalance, double amount, object otherArguments)
{
string cheqNum = otherArguments.ToString();
if (!string.IsNullOrEmpty(cheqNum))
{
currentBalance -= amount;
}
return currentBalance;
}
}
public SavingAccountWithdrawer: WithdrawStrategy
{
public double withdraw(double currentBalance, double amount, object otherArguments)
{
if (currentBalance - amount > 100) //hard code for example's sake
{
currentBalance -= amount;
}
return currentBalance;
}
}