码迷,mamicode.com
首页 > 其他好文 > 详细

工厂方法模式

时间:2020-03-30 12:36:40      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:stat   void   uml类图   getchar   柱状图   版本   hba   控制台   不同   

定义

定义了一个创建对象的接口,由子类决定实例化哪一个对象,工厂方法让类把实例化推迟到子类。

UML类图

技术图片

实现

案例:提供一个画图程序,支持柱状图和饼图,根据不同的用户类型(免费/付费),显示不同的图形版本,付费用户会得到更丰富的图形显示。
为了能够简单描述工厂方法模式,应用以控制台应用的形式编写

定义接口

Creater

    public interface IChartCreater
    {
        IChart GetChart(string type,string title);
    }

Product

    public interface IChart
    {
        string Title { get; set; }
        void GenerateChart();
    }

定义ConcreteProduct

免费类型

    public class BarChart : IChart
    {
        public string Title { get; set ; }

        public BarChart(string title)
        {
            Title = title;
        }

        public void GenerateChart()
        {
            Console.WriteLine($"Drawing a Bar chart with title {Title}");
        }
    }
    public class PieChart : IChart
    {
        public string Title { get; set; }

        public PieChart(string title)
        {
            Title = title;
        }

        public void GenerateChart()
        {
            Console.WriteLine($"Drawing a Pie chart with title {Title}");
        }
    }

付费类型

    public class RichBarChart : IChart
    {
        public string Title { get; set; }

        public RichBarChart(string title)
        {
            Title = title;
        }

        public void GenerateChart()
        {
            Console.WriteLine($"Drawing a Rich Bar chart with title {Title}");
        }
    }
    public class RichPieChart : IChart
    {
        public string Title { get; set; }

        public RichPieChart(string title)
        {
            Title = title;
        }

        public void GenerateChart()
        {
            Console.WriteLine($"Drawing a Rich Pie chart with title {Title}");
        }
    } 

定义ConcreteCreater

免费类型

    public class ChartCreaterFree : IChartCreater
    {
        public IChart GetChart(string type, string title)
        {
            if (type=="bar")
            {
                return new BarChart(title);
            }
            if (type=="pie")
            {
                return new PieChart(title);
            }
            return null;
        }
    }

付费类型

    public class ChartCreaterPaid : IChartCreater
    {
        public IChart GetChart(string type, string title)
        {
            if (type == "bar")
            {
                return new RichBarChart(title);
            }
            if (type == "pie")
            {
                return new RichPieChart(title);
            }
            return null;
        }
    }

测试

    class Program
    {
        static void Main(string[] args)
        {
            IChartCreater createrFree = new ChartCreaterFree();
            IChartCreater createrPaid = new ChartCreaterPaid();

            IChart bar = createrFree.GetChart("bar", "a free bar chart");
            IChart pie = createrPaid.GetChart("pie", "a paid pie chart");

            bar.GenerateChart();
            pie.GenerateChart();
            Console.ReadLine();
        }
    }

工厂方法模式

标签:stat   void   uml类图   getchar   柱状图   版本   hba   控制台   不同   

原文地址:https://www.cnblogs.com/Saints/p/12596951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!