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"; }
}
}