namespace _19_Observer
{
public class ATM
{
BankAccount bankAccount;
public void Process(int data)
{
bankAccount.WithDraw(data);
}
}
public class BankAccount
{
Emailer emailer;
Mobile mobile;
string userEmail = "";
string phoneNumber = "";
public void WithDraw(int data)
{
emailer.SendEmail(userEmail);
mobile.SendNotification(phoneNumber);
}
}
public class Emailer
{
public void SendEmail(string se)
{
}
}
public class Mobile
{
public void SendNotification(string sn)
{
}
}
}
namespace _19_Observer_2
{
public interface IAccountObserver
{
void Update(UserAccountArgs args);
}
public class UserAccountArgs : EventArgs
{
public string ToAddress { get; set; }
public string MobileNumber { get; set; }
}
public class Emailer : IAccountObserver
{
public void Update(UserAccountArgs args)
{
string toAddress = args.ToAddress;
}
}
public class Mobile : IAccountObserver
{
public void Update(UserAccountArgs args)
{
string mobileNumber = args.MobileNumber;
}
}
public abstract class Subject
{
List<IAccountObserver> observerList = new List<IAccountObserver>();
protected virtual void AddObserver(IAccountObserver observer)
{
observerList.Add(observer);
}
protected virtual void RemoveObserver(IAccountObserver observer)
{
observerList.Remove(observer);
}
protected virtual void Notify(UserAccountArgs args)
{
foreach (var observer in observerList)
{
observer.Update(args);
}
}
}
public class AccountChangeEventHandlerArgs : EventArgs
{
}
public delegate void AccountChangeEventHandler(object sender, UserAccountArgs args);
public class BankAccount : Subject
{
public event AccountChangeEventHandler AccountChange;
public void WithDraw(int data)
{
UserAccountArgs args = new UserAccountArgs();
Notify(args);
}
protected virtual void OnAccountChange(UserAccountArgs args)
{
if (AccountChange != null)
{
AccountChange(this, args);
}
}
}
public class EmailerEvent
{
public void Update(object sender, UserAccountArgs args)
{
string toAddress = args.ToAddress;
}
}
internal class Program
{
static void Main(string[] args)
{
BankAccount bankAccount = new BankAccount();
EmailerEvent email = new EmailerEvent();
bankAccount.AccountChange += new AccountChangeEventHandler(email.Update);
}
}
}