设计模式之简单工厂模式

1、编制类图

2、打开vs2010

3、 依次点击菜单“文件(F”>新建(N)>”项目(P)”,弹出下面对话框:

4、 在弹出的对话框中,在模板选项下选择“Visual C#”->“Windows”选项,最后选择“控制台应用程序”。

 

5、 在名称文本(N)框中输入项目名称“SimpleFactorySample”,解决方案名称命名为“SimpleFactorySample”,并设置保存路径。

6、其它项取默认值,然后点击“确定按钮”,将生成下面的解决方案。

7、 新建Chart类:抽象图表接口,充当抽象产品类。 

8、新建HistogramChart类,表示柱状图类,充当具体产品类。

using System;

 

namespace SimpleFactorySample

{

    class HistogramChart : Chart 

    {

    public HistogramChart()

        {

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

    }

    public void Display()

        {

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

    }

    }

}

9、 新建PieChart类,表示饼状图类,充当具体产品类。

using System;

namespace SimpleFactorySample

{

    class PieChart : Chart 

    {

    public PieChart()

        {

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

    }

    public void Display()

        {

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

    }

    }

}

10、 新建LineChart,表示折线图类,充当具体产品类。

using System;

namespace SimpleFactorySample

{

    class LineChart : Chart

    {

        public LineChart()

        {

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

    }

        public void Display()

        {

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

    }

}

11、 创建图表工厂类ChartFactory,用于充当工厂类

using System; 

namespace SimpleFactorySample

{

    class ChartFactory

    {

        //静态工厂方法

        public static Chart GetChart(string type)

        {

    Chart chart = null;

    if (type.Equals("histogram"))

            {

    chart = new HistogramChart();

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

    }

    else if (type.Equals("pie"))

            {

    chart = new PieChart();

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

    }

    else if (type.Equals("line"))

            {

    chart = new LineChart();

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

    }

    return chart;

    }

    }

}

12、更新客户端测试类的代码

using System;

using System.Configuration;

namespace SimpleFactorySample

{

    class Program

    {

        static void Main(string[] args)

        {

            /*

            Product product;

            product = Factory.GetProduct("A"); //通过工厂类创建产品对象

            product.MethodSame();

            product.MethodDiff();

            */

            Chart chart;

            //读取配置文件

            string chartStr = ConfigurationManager.AppSettings["chartType"];

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

            chart.Display();

            Console.Read();

        }

    }

}

新建并实现如下类:

using System;

namespace SimpleFactorySample

{

    abstract class Product

    {

        //所有产品类的公共业务方法

        public void MethodSame()

        {

            //公共方法的实现

        }

        //声明抽象业务方法

        public abstract void MethodDiff();

    }

 

    class ConcreteProductA : Product

    {

        //实现业务方法

        public override void MethodDiff()

        {

            //业务方法的实现

        }

    }

    class ConcreteProductB : Product

    {

        //实现业务方法

        public override void MethodDiff()

        {

            //业务方法的实现

        }

    }

    class Factory

    {

        //静态工厂方法

        public static Product GetProduct(string arg)

        {

            Product product = null;

            if (arg.Equals("A"))

            {

                product = new ConcreteProductA();

                //初始化设置product

            }

            else if (arg.Equals("B"))

            {

                product = new ConcreteProductB();

                //初始化设置product

            }

            return product;

        }

    }

}

namespace SimpleFactorySample

{

    /*

    abstract class Product

    {

        public abstract void Process();

    }

    class ConcreteProductA : Product

    {

        public override void Process()

        {

            //......

        }

    }

    class ConcreteProductB : Product

    {

        public override void Process()

        {

            //......

        }

    }

    class Factory

    {

        public static Product CreateProduct(char type)

        {

            switch(type)

            {

                case 'A':

                    return new ConcreteProductA(); break;

                case 'B':

                    return new ConcreteProductB(); break;

                //......

            }

        }

    }

    */

}

13、 编译及运行程序,输出如下结果:

 

posted @ 2016-11-24 11:35  Jonny-Xhl  阅读(357)  评论(0编辑  收藏  举报