委托实现信用卡定时还款功能
功能说明
实现银行自动提醒用户还款与自动从用户卡上扣款功能,用户的信用卡在具体的日期需要进行还款行为。我们需要使用使用储蓄卡,在扣费时,直接在储蓄卡内扣除费用进行还款。
主要代码
1、定义委托、事件
class Delegates
{
// 定义委托
public delegate void Delegate(User user);
// 定义事件
public event Delegate repayment; // 提醒还款
public event Delegate deductiont; // 自动扣款
// 判断事件能否启用
public void MyRemind(User user)
{
// 如果事件不为null
if (repayment != null)
repayment(user);
}
// 扣款
public void MyDeduct(User user)
{
if (deductiont != null)
deductiont(user);
}
}
2、提醒和扣款
class Operation
{
public void Remind_func(User user)
{
Console.WriteLine("亲爱的{0}用户,您的还款日期即将到来,本次需还款{1}元!", user.Name, user.Debt);
Console.WriteLine();
}
public void Deduct_func(User user)
{
Console.WriteLine("亲爱的{0}用户,您的借记卡原余额为{1}元", user.Name, user.Deposit);
Console.WriteLine("本次还清账单{0}元,借记卡目前余额为{1}元!", user.Debt, user.Deposit - user.Debt);
Console.WriteLine();
}
}
3.主函数
static void Main(string[] args)
{
// 委托的对象
Delegates A1= new Delegates();
Delegates A2= new Delegates();
User user1 = new User("小明", 6600, 730, 11);
User user2 = new User("小红", 20000, 3000, 4);
// 对象 委托事件 执行操作
Operation operate = new Operation();
A1.repayment += operate.Remind_func;
A2.deductiont += operate.Deduct_func;
// 提醒还款、扣除 时间线
for (int day = 0; day <= 30; day++)
{
// 提醒还款触发事件
if (user1.Date - day == 3)
A1.MyRemind(user1);
if (user2.Date - day == 3)
A2.MyRemind(user2);
// 扣除款项触发事件
if (day == user1.Date)
A1.MyDeduct(user1);
if (day == user2.Date)
A2.MyDeduct(user2);
}
}
结果截图
心得体会
在观察者模式或发布/订阅里:在一个类里发布某个可以被触发的事件,而其他的类就可以来订阅该事件。一但这个发布者类触发了该事件,那么运行时环境会立刻告知所有订阅了该事件的订阅者类:这个事件发生了!从而各个订阅者类可以作出它们自己的反应。