设计模式—简单工厂模式

原创 2016年05月31日 20:17:46

简单工厂模式不属于GoF的23种经典设计模式。

一、定义

定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

在C#语言中,创建对象的四种方式:

1)  使用new关键字直接创建对象;

2)  使用反射机制创建对象;

3)  使用克隆方法创建对象;

4)  通过工厂类创建对象。

二、结构

(1)Factory(工厂类或工厂角色)

工厂类是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑。工厂类可以直接被外部调用,创建所需要的产品对象。

(2)Product(抽象产品类)

它是工厂类所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

(3)ConcreteProduct(具体产品类)

是简单工厂模式的创建目标,是创建的具体实例对象。

三、应用实例

抽象产品类Chart.cs

    interfaceChart

    {

        voidDisplay();

}

具体产品类(包含HistogramChart.cs、PieChart.cs和LineChat.cs三个文件)

    classHistogramChart : Chart

    {

        publicHistogramChart()

        {

            Console.WriteLine("创建柱状图");

        }

        publicvoidDisplay()

        {

            Console.WriteLine("显示柱状图");

        }

    }

    classPieChart : Chart

    {

        publicPieChart()

        {

            Console.WriteLine("创建饼状图");

        }

        publicvoidDisplay()

        {

            Console.WriteLine("显示饼状图");

        }

    }

    classLineChart : Chart

    {

        publicLineChart()

        {

            Console.WriteLine("创建折线图");

        }

        publicvoidDisplay()

        {

            Console.WriteLine("显示折线图");

        }

    }

工厂类(该类中要对类型进行判断)

    classChartFactory

    {

        publicstaticChart GetChart(string type)

        {

            Chart chart = null;

            if(type.Equals("histogram"))

            {

               chart = new HistogramChart();

               Console.WriteLine("初始化设置柱状图");

            }

            elseif(type.Equals("pie"))

            {

               chart = new PieChart();

               Console.WriteLine("初始化设置饼状图");

            }

            elseif(type.Equals("line"))

            {

               chart = new LineChart();

               Console.WriteLine("初始化设置折线图");

            }

            returnchart;

        }

    }

客户端测试类(Program.cs文件)

    classProgram

    {

        staticvoidMain(string[] args)

        {

            Chart chart;

           chart = ChartFactory.GetChart("histogram");//通过静态工厂方法创建产品

           chart.Display();

 

            Console.Read();

        }

    }

说明:要在客户端进行操作时,每次都要修改成所需的类型。

四、简单工厂模式的优点

(1)工厂类包含必要的判断逻辑;实现了对象创建和使用的分离。

(2)客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。

(3)简单模式提高了灵活性。

五、简单工厂模式的缺点

(1)工厂类集中了所有产品的创建逻辑,职责过于繁重。

(2)简单工厂模式会增加系统中类的个数,增加了系统的复杂度和理解的难度。

(3)使得系统的扩展性降低。

(4)简单工厂模式中使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。C#语言中,不能通过类的实例对象来访问静态方法和静态变量。

版权声明:本文为博主原创文章,未经博主允许不得转载。

23种设计模式—之简单工厂模式

简单工厂模式(SimpleFactory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实...

<Java设计模式>—简单工厂模式

—简单工厂模式 简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。   在简单工厂模式中,一个工厂类处于对产品类实例化调用的中...

JAVA设计模式 — 简单工厂模式

定义:定义一个用于创建对象的工厂类,让它决定实例化哪一个子类。 类型:对象创建型模式 简单工厂模式:        简单工厂模式是工厂方法模式的一个特例,通过...
  • FX_SKY
  • FX_SKY
  • 2013年01月05日 15:19
  • 1158

设计模式学习(一)————简单工厂模式

我觉得设计模式是对于面向对象类型语言所特有的,同时也是是学习自己进行软件构建的基础。进行设计模式学习之前,首先要知道软件构建的几个要求: 可维护:即要改,只需更改要改的地方 可复用:要用的代码并非用完...

设计模式—简单工厂模式

设计模式之简单工厂模式 看书学习设计模式,书本来源《大话设计模式》,啃一啃怎么样设计程序 在“大话”这本书中写简单工厂模式用计算器为例来说明,其实是最简单的面向接口的编程思维,不依赖与具体的实现,而重...

JAVA设计模式(02) — 简单工厂模式

定义:定义一个用于创建对象的工厂类,让它决定实例化哪一个子类。 类型:对象创建型模式 简单工厂模式:     ...

《设计模式》—简单工厂模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建...

设计模式之简单工厂模式

  • 2014年08月17日 14:51
  • 33KB
  • 下载

设计模式之二:简单工厂模式—集中式工厂的实现

简单工厂模式的定义(Simple Factory Pattern): 定义一个工厂类,它可以根据参数的不同返回不同的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式—简单工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)