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
    }

  • 相关阅读:
    安卓基础值之Intent
    输入值/表单提交参数过滤有效防止sql注入的方法
    一致性hash
    linux授权某个用户对某个目录有读写的权限
    mysql分区功能详细介绍,以及实例
    SVN分支与主干
    solr查询
    mysql-proxy做客户端连接转发【外网访问内网mysql】
    liunx 下安装 php_screw 扩展 以及报错处理
    邮件发送
  • 原文地址:https://www.cnblogs.com/jasonjiang/p/1763557.html
Copyright © 2011-2022 走看看