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();
                }
            }
        }

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

  • 相关阅读:
    codeforces_346A Alice and Bob(数学)
    POJ_2533 Frogger 最小瓶颈路
    hdu1205_吃糖果
    POJ_2503 Babelfish 字典树
    在PC上登录多个微信账号
    查看百度云用户的分享文件
    QQ邮箱收不到ins发的验证码
    试用Fakeapp
    为什么使用网易邮箱
    插入央视网站视频
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2986267.html
Copyright © 2011-2022 走看看