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

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

  • 相关阅读:
    CPP标准模板库 随笔
    C++ Concurrency In Action 一些重点
    标准模板库(STL)
    单链表常见操作
    android三大组件之Intent
    数组k平移三种方法(java)
    java中空字符串、null的区别
    java最大最小堆
    java学习笔记之基础知识
    笔试题集锦
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2986267.html
Copyright © 2011-2022 走看看