zoukankan      html  css  js  c++  java
  • 设计模式之简单工厂模式

    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、 编译及运行程序,输出如下结果:

  • 相关阅读:
    Django跨域问题
    DOM,jquery,vue
    from和modelform的用法和介绍
    元类的__call__和__new__方法的作用
    Django学习之路由分发和反向解析
    Django 自定义auth_user
    Django创建对象的create和save方法
    Flask--(登录注册)抽取视图函数
    Flask--(项目准备)--添加日志
    Flask--(项目准备)--框架搭建,配置文件抽取,业务逻辑抽取
  • 原文地址:https://www.cnblogs.com/cqxhl/p/6097110.html
Copyright © 2011-2022 走看看