利用简单工厂模式设计一个私人支票帐簿管理程序,一个人可以拥有几个帐号 ,不同的帐号可以设置每次取钱有不同限制(如以010开头的帐号,每次最多只能取5000,B帐号则每次最多可以取10000),至于存钱,按照常理,就不做限制.
做法步骤:
先设计一个帐号的基类
public class Account//
基类
{
protected string accountName;//
银行帐号
protected int fundNumber;//
交易金额
public static int leftNumber;//
帐户余额
protected bool getOset;//
存钱取钱标致,True表示取钱
public string result;//
交易结果
//
获取交易结果
public string getaccountname()
{
return accountName;
}
public string getfunderNumber()
{
return fundNumber.ToString();
}
public string getexchangeResult()
{
result+="
帐户:"+accountName+" 交易金额:"+fundNumber.ToString()+" 余额:"+leftNumber.ToString();
return result;
}
}
第二步:定义两个派生类a帐号和b帐号类
//
两个派生的类
public class AccountA:Account//A
银行帐号,每天只允许取5000
{
public AccountA(string saccountName,int ifundNumber,bool bgetOset)
{
if(bgetOset)
{
accountName=saccountName;
fundNumber=ifundNumber;
leftNumber+=ifundNumber;
result="
交易成功";
}
else
{
if(ifundNumber>5000)
{
result+="
交易金额超出最大限制5000";
}
else
{
if(ifundNumber>leftNumber)
{
result="
交易金额超出余额";
}
else
{
accountName=saccountName;
fundNumber=ifundNumber;
leftNumber-=ifundNumber;
result="
交易成功";
}
}
}
}
}
public class AccountB:Account//B
银行帐号,每天只允许取10000
{
public AccountB(string saccountName,int ifundNumber,bool bgetOset)
{
if(bgetOset)
{
accountName=saccountName;
fundNumber=ifundNumber;
leftNumber+=ifundNumber;
result="
交易成功";
}
else
{
if(ifundNumber>10000)
{
result+="
交易金额超出最大限制10000";
}
else
{
if(ifundNumber>leftNumber)
{
result="
交易金额超出余额";
}
else
{
accountName=saccountName;
fundNumber=ifundNumber;
leftNumber-=ifundNumber;
result="
交易成功";
}
}
}
}
}
第三步:
//
构建简单工厂
public class AccountFactory
{
public AccountFactory(){}
public Account getResult(string saccountname,int ifundNumer,bool bgetOset)
{
string CountType=saccountname.Trim().Substring(0,3);//
根据输入帐号的前三个数字判断是否是A银行帐号
if (CountType=="010")
{
return new AccountA(saccountname,ifundNumer,bgetOset);
}
else
{
return new AccountB(saccountname,ifundNumer,bgetOset);
}
}
}
第四步:使用工厂
private void Button4_Click(object sender, System.EventArgs e)
{
AccountFactory accountFact=new AccountFactory();
int number=Int32.Parse(txNumber.Text);
Account account=accountFact.getResult(txAccount.Text,number,opSet.Checked);
lbResult.Text=account.getexchangeResult();
}
最后效果如下: