zoukankan      html  css  js  c++  java
  • 工厂模式的传统实现

    using System;
    using System.Collections.Generic;
    using System.Text;
    // Download by http://www.codefans.net
    namespace NET.MST.Sixth.TraFactory
    {
        /// <summary>
        /// 使用者
        /// </summary>
        class Customer
        {
            static void Main(string[] args)
            {
                //根据需要获得不同的产品零件
                IProduct window = FactoryManager.GetProduct(RoomParts.Window);
                IProduct roof = FactoryManager.GetProduct(RoomParts.Roof);
                IProduct pillar = FactoryManager.GetProduct(RoomParts.Pillar);
            }
        }
        /// <summary>
        /// 屋子产品的零件
        /// </summary>
        enum RoomParts
        {
            Roof,
            Window,
            Pillar
        }
        /// <summary>
        /// 工厂接口
        /// </summary>
        interface IFactory
        {
            IProduct Produce();
        }
        /// <summary>
        /// 产品接口
        /// </summary>
        interface IProduct
        {
            String GetName();
        }
        /// <summary>
        /// 工厂管理者
        /// </summary>
        class FactoryManager
        {
            public static IProduct
                GetProduct(RoomParts part)
            {
                IFactory factory=null;
                //这里就是传统工厂模式的弊端
                //工厂管理者和工厂类族耦合
                switch (part)
                {
                    case RoomParts.Pillar:
                        factory = new PillarFactory();
                        break;
                    case RoomParts.Roof:
                        factory = new RoofFactory();
                        break;
                    case RoomParts.Window:
                        factory = new WindowFactory();
                        break;
                }
                IProduct product=factory.Produce();
                Console.WriteLine("生产了一个产品:" +
                        product.GetName());
                return product;
            }
        }
        #region 工厂类族
        class RoofFactory : IFactory
        {
            public IProduct Produce()
            {
                return new Roof();
            }
        }
        class WindowFactory : IFactory
        {
            public IProduct Produce()
            {
                return new Window();
            }
        }
        class PillarFactory : IFactory
        {
            public IProduct Produce()
            {
                return new Pillar();
            }
        }
        #endregion

        #region 产品类族
        class Roof : IProduct
        {
            public String GetName()
            {
                return "屋顶";
            }
        }
        class Window : IProduct
        {
            public String GetName()
            {
                return "窗户";
            }
        }
        class Pillar : IProduct
        {
            public String GetName()
            {
                return "柱子";
            }
        }
        #endregion
    }

  • 相关阅读:
    iframe页面向上获取父级元素
    解决flex布局 做后一行 靠左的问题
    JavaScript Base64 作为文件上传的实例代码解析
    Python中Flask框架SQLALCHEMY_ECHO设置
    #跟着教程学# 5、python的异常
    #跟着教程学# 4、Python流程控制
    #跟着教程学# 3、Python基础 //Maya select和ls命令返回值问题
    #跟着教程学# 2、Maya Developer Kit下载,及 PyCharm关联Maya
    #跟着教程学# 1、Python_文件批量改名
    (转)maya螺旋线脚本(mel)
  • 原文地址:https://www.cnblogs.com/jasonjiang/p/1763557.html
Copyright © 2011-2022 走看看