class BridgePattern { public static void Main() { IReport reportMonthly = new MonthlyReport(); IReport reportYearly = new YearlyReport(); ReportChart reportChart = new ColumnReportChart(); reportChart.SetReport(reportMonthly); reportChart.Display(); reportChart.SetReport(reportYearly); reportChart.Display(); } } abstract class ReportChart { protected IReport report; public void SetReport(IReport rpt) { report = rpt; } public abstract void Display(); } class ColumnReportChart : ReportChart { public override void Display() { Console.WriteLine("------------{0} by 'Column Chart!!'-------------", report.ReportName); foreach (var item in report.GetReportData()) { Console.WriteLine(item); } Console.WriteLine(); } } class PieReportChart : ReportChart { public override void Display() { Console.WriteLine("------------{0} by 'Pie Chart!!'-------------", report.ReportName); foreach (var item in report.GetReportData()) { Console.WriteLine(item); } Console.WriteLine(); } } interface IReport { string ReportName { get; } List<string> GetReportData(); } class YearlyReport : IReport { public List<string> GetReportData() { var data = new List<string> { "2010,370", "2011,420", "2012,320", "2013,490", }; return data; } public string ReportName { get { return "Yearly Report"; } } } class MonthlyReport : IReport { public List<string> GetReportData() { var data = new List<string> { "Jan,370", "Feb,420", "Mar,320", "Apr,490" }; return data; } public string ReportName { get { return "Monthly Report"; } } }