zoukankan      html  css  js  c++  java
  • 最简单的工厂模式

    你想如果有多个类似的类,我们就需要实例化出来多个类。这样代码管理起来就太复杂了。 
    这个时候你就可以采用工厂方法来封装这个问题。

     public interface IProduct { }
        public class ConcreteProductA : IProduct { }
        public class ConcreteProductB : IProduct { }
    
        public class Factory
        {
            public IProduct Create()
            {
                // 工厂决定到底实例化哪个子类。
                return new ConcreteProductA();
            }
        }

    那么再延伸下,如果我要生产B怎么办

    一般我们会想到,加入参数,好,说到参数,你想怎么加,呵呵,设计模式的作者给我一个例子,我觉得非常好,如果我们一般人,我想多数这么做

      public IProduct Create(IProduct product)
            {
                //判断B是否实现了接口
                //B b = new B();
                //if (b.GetType().GetInterface("ISay") != null)
                //{
                //    //如果实现了接口“ISay”,...
                //}
                // 工厂决定到底实例化哪个子类。
             
            }

    但是我觉得作者这里给出了另外一种思维模式,让我们看看

     public enum Category
        {
            A,
            B
        }
    
        public static class ProductFactory
        {
            public static IProduct Create(Category category)
            {
                switch (category)
                {
                    case Category.A:
                        return new ConcreteProductA();
                    case Category.B:
                        return new ConcreteProductB();
                    default:
                        throw new NotSupportedException();
                }
            }
        }

    并不是说这样非常好,但是这种思想还是值得在某些地方借鉴

  • 相关阅读:
    在线制作流程图
    表格设计有感
    mvp需要加上单利模式
    2015.7.17( NOI2015 day1 )
    BZOJ 2073: [POI2004]PRZ( 状压dp )
    1688: [Usaco2005 Open]Disease Manangement 疾病管理( 枚举 )
    BZOJ 1072: [SCOI2007]排列perm( )
    BZOJ 1475: 方格取数( 网络流 )
    BZOJ 3524: [Poi2014]Couriers( 主席树 )
    BZOJ 1087: [SCOI2005]互不侵犯King( 状压dp )
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2986267.html
Copyright © 2011-2022 走看看