设计模式的学习-(2)简单工厂模式

集中式工厂的实现–简单工厂模式

简单工厂模式并不是Gof中定义的23中模式的一种,但是它是学习工厂方法模式和抽象工厂模式的基础。
简单工厂模式的定义如下:定义一个工厂类,他可以根据不同的参数来返回不同类的实例,通常这些类都有一个共同的父类,因为在简单工厂模式中进行创建的类的方法都是静态方法,因此简单工程模式又被称为“静态工厂方法”模式,它属于类创建型模式。
简单工厂模式的要点在于:当你需要什么,你只需要传入一个参数,就可以获得你需要的对象。而无须知道创建的细节。
C#创建简单工厂模式的例子如下:

interface IChart
    {
        void DisplayChart();
    }
 class HistogramChart : IChart
    {
        public HistogramChart()
        {
          Console.WriteLine("create a histogramchart");
        }
        public void DisplayChart()
        {
            Console.WriteLine("display a histogramchart");
        }
    } 
 class LineChart:IChart
    {
        public LineChart()
        {
            Console.WriteLine("create a linechart");
        }
        public void DisplayChart()
        {
            Console.WriteLine("display a line chart");
        }
    } 
  class PieChart:IChart
    {
        public PieChart()
        {
            Console.WriteLine("create piechart instance");
        }
        public void DisplayChart()
        {
           Console.WriteLine("Display a piechart");
        }
    }
   class Factory
    {
        public static IChart GetChart(string type)
        {
            IChart chart = null;
            if (type.Equals("histogram",StringComparison.OrdinalIgnoreCase))
            {
                chart=new HistogramChart();

            }
            else if (type.Equals("pie",StringComparison.CurrentCultureIgnoreCase))
            {
                chart=new PieChart();
            }
            else
            {
                chart=new LineChart();
            }
            return chart;
        }
    }           

上面这个例子就是一个简单工程的例子。在这个例子中,我们需要设计一个图表的软件,在没有工厂类之前,一般需要用new来创建需要的实例,在简单工厂模式中,工厂类提供了一个静态的方法来根据传入参数的不同来提供不同的实例对象,这些实例对象都实现IChart接口。其中核心的就是Factory工厂。


方案的改进

上面这个段代码的缺点在于需要生成不同对象的时候修改源代码(Factory类中静态方法的参数)。违法了开闭原则。好一点的做法是(C#中)将参数的字符串放在config文件中,然后用system.configuration(.net core中是Microsoft.Extensions.Configuration)去读取xml的节点数据,然后传入Factory方法的参数中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值