关闭

设计模式—简单工厂模式

114人阅读 评论(0) 收藏 举报
分类:

简单工厂模式不属于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#语言中,不能通过类的实例对象来访问静态方法和静态变量。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:77358次
    • 积分:3514
    • 等级:
    • 排名:第9392名
    • 原创:283篇
    • 转载:19篇
    • 译文:1篇
    • 评论:25条
    最新评论