Console.WriteLine("Audit record");
public abstract class Task
private AuditTrail auditTrail;
public Task(AuditTrail auditTrail)
this.auditTrail = auditTrail;
protected abstract void DoExecute();
public class TransferMoneyTask: Task
public TransferMoneyTask(AuditTrail auditTrail): base(auditTrail)
protected override void DoExecute()
Console.WriteLine("Transfer money");
public class GenerateReportTask: Task
public GenerateReportTask(AuditTrail auditTrail): base(auditTrail)
protected override void DoExecute()
Console.WriteLine("Generate Report");
public static void Main()
var auditTrail = new AuditTrail();
var transferMoney = new TransferMoneyTask(auditTrail);
var generateReport = new GenerateReportTask(auditTrail);
generateReport.Execute();