Design Pattern - Bridge Pattern

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

 

posted @ 2014-04-12 15:03  cnbwang  阅读(190)  评论(0编辑  收藏  举报