您的位置:首页 > 其它

设计模式—简单工厂模式

2016-05-31 20:17 246 查看
简单工厂模式不属于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#语言中,不能通过类的实例对象来访问静态方法和静态变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: