• C#设计模式之简单工厂模式


    简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用"new"关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用面向对象(OO)的很重要的原则去解决这一的问题,该原则就是——封装改变,既然要封装改变,自然也就要找到改变的代码,然后把改变的代码用类来封装,这样的一种思路也就是我们简单工厂模式的实现方式了

    namespace SimpleFactory
    {
        /// <summary>
        /// 顾客充当客户端,负责调用简单工厂来生产对象
        /// 即客户点菜,厨师(相当于简单工厂)负责烧菜(生产的对象)
        /// </summary>
        class Customer
        {
            static void Main(string[] args)
            {
                // 客户想点一个西红柿炒蛋        
                Food food1 = FoodSimpleFactory.CreateFood("西红柿炒蛋");
                food1.Print();
    
                // 客户想点一个土豆肉丝
                Food food2 = FoodSimpleFactory.CreateFood("土豆肉丝");
                food2.Print();
    
                Console.Read();
            }
        }
    
        /// <summary>
        /// 菜抽象类
        /// </summary>
        public abstract class Food
        {
            // 输出点了什么菜
            public abstract void Print();
        }
    
        /// <summary>
        /// 西红柿炒鸡蛋这道菜
        /// </summary>
        public class TomatoScrambledEggs : Food
        {
            public override void Print()
            {
                Console.WriteLine("一份西红柿炒蛋!");
            }
        }
    
        /// <summary>
        /// 土豆肉丝这道菜
        /// </summary>
        public class ShreddedPorkWithPotatoes : Food
        {
            public override void Print()
            {
                Console.WriteLine("一份土豆肉丝");
            }
        }
    
        /// <summary>
        /// 简单工厂类, 负责 炒菜
        /// </summary>
        public class FoodSimpleFactory
        {
            public static Food CreateFood(string type)
            {
                Food food = null;
                if (type.Equals("土豆肉丝"))
                {
                    food = new ShreddedPorkWithPotatoes();
                }
                else if (type.Equals("西红柿炒蛋"))
                {
                    food = new TomatoScrambledEggs();
                }
    
                return food;
            }
        }
    
    }

    详细:C#设计模式(2)——简单工厂模式

    实例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Configuration;
    
    namespace SimpleFactory
    {
        /// <summary>
        /// 抽象图表接口,充当抽象类
        /// </summary>
        internal interface Chart
        {
            void Display();
        }
        /// <summary>
        /// 柱状图
        /// </summary>
        class HistogramChart : Chart
        {
            public  HistogramChart()
            {
                    Console.WriteLine("创建柱状图");
            }
    
            public void Display()
            {
                Console.WriteLine("显示柱状图");
            }
        }
        /// <summary>
        /// 饼状图
        /// </summary>
        class PieChart : Chart
        {
            public PieChart()
            {
                Console.WriteLine("创建饼状图");
            }
    
            public void Display()
            {
                Console.WriteLine("显示饼状图");
            }
        }
        /// <summary>
        /// 折线图
        /// </summary>
        internal class LineChart:Chart
        {
            public LineChart()
            {
                Console.WriteLine("创建折线图");
            }
    
            public void Display()
            {
                Console.WriteLine("显示折线图");
            }
        }
        /// <summary>
        /// 图表工厂
        /// </summary>
        internal 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;
            }
        }
        /// <summary>
        /// 客户端测试类
        /// </summary>
         class Programs
        {
            static void Main(string[] args)
            {
                Chart chart;
                //读取配置文件(修改配置文件可实现创建不同的方法)
                string chartStr = ConfigurationSettings.AppSettings["chartType"];
                chart = ChartFactory.Getchart(chartStr);
                chart.Display();
                Console.ReadKey();
            }
        }
    }
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="chartType" value="histogram"/>
      </appSettings>
    </configuration>
  • 相关阅读:
    虔诚的墓主人:组合数+数据结构
    DZY Loves Math II:多重背包dp+组合数学
    集合计数 :容斥原理
    「一本通 6.6 练习 8」礼物
    [bzoj3529][Sdoi2014]数表
    [专题总结]AC自动机
    6/14考试总结
    [无用]LNC李纳川的日常NC操作
    Linux下基本操作
    [ bzoj2820] YY的GCD
  • 原文地址:https://www.cnblogs.com/lbonet/p/7116160.html
Copyright © 2020-2023  润新知