• 三两句记录设计模式(1)——简单工厂模式


     简单工厂模式

    简单工厂模式主要是利用分支(if..else 或者 switch..case),然后根据外部参数来决定客户端调用的具体对象。

    而外部参数基本上是客户端传递进相应的工厂类(当然也可以不靠客户端传递,直接根据资源文件来确定)。

    在更多的时候工厂类是直接返回个接口实例或者基类对象,这也意味着工厂类只负责对象创建,而基本不参与具体的逻辑处理或调用具体逻辑

    简单的实例代码:

    View Code
        public interface MaterialInfo
        {
            DataTable GetMaterialInfo();
        }
    
        //简单工厂:通过工厂来确定换回真正要调用的接口实例
        public class SimpleFactory
        {
            private MaterialInfo info;
    
            public MaterialInfo GetInfo(int type)
            {
                switch (type)
                {
                    case 1:
                        info = new RawMaterialsInfo();
                        break;
                    case 2:
                        info = new SemifinishedInfo();
                        break;
                    default:
                        break;
                }
                return info;
            }
        }
    
    
        //原料
        public class RawMaterialsInfo : MaterialInfo
        {
            public DataTable GetMaterialInfo()
            {
                return new DataTable();
            }
        }
    
        //半成品
        public class SemifinishedInfo:MaterialInfo
        {
            public DataTable GetMaterialInfo()
            {
                return new DataTable();
            }
        }
    
        //客户端调用
        public class ClientSimpleFatory
        {
            public DataTable GetMaterialInfo()
            {
                SimpleFactory single = new SimpleFactory();
                MaterialInfo info = single.GetInfo(1);
                return info.GetMaterialInfo();
            }
        }

    可以看得出来,简单工厂比较简单,并没有什么复杂难懂的地方。

    但是也应该看到此方式有些瑕疵(这是真的吗?),那就是如果有新的业务模型进来时,必须修改工厂类的分支判定。从而会导致分支判定不断的增加(这不OOP..)

    至于客户端的修改,那是基本上无可避免的(参数放在资源文件上除外)

  • 相关阅读:
    POJ 2513 (Trie树+欧拉通路+并查集判断连通)
    归并排序及序列逆序数
    POJ 2442 Sequence (堆+K路归并)
    POJ 2513 (Trie树+欧拉通路+并查集判断连通)
    J2EE概述
    J2EE概述
    J2EE概述
    学习视频资料下载论坛
    J2EE概述
    J2EE概述
  • 原文地址:https://www.cnblogs.com/haiyidao/p/2720461.html
Copyright © 2020-2023  润新知