• 简单工厂


    简单工厂模式的最大优点在于工厂类包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对于客户端磊说,去除了与具体产品的依赖

    对于简单工厂模式,其实就是将不同的东西抽象话,提取公共部分,然后以接口或者虚方法或者抽象成父类,然后针对不同的业务都继承,进而实现子类

    这样就可以对外暴露一个父类即可,简单工厂进而将对外暴露的子类封装,可以通过参数传递,或者配置文件,亦或是反射进行工厂处理,进而达到对外暴露公共的目的,实现解耦的目的,便于业务的维护

    案例说明

    有两个消息需要发送(A和B),都继承于公共的消息接口,工厂返回的是公共的父类接口,但是内部是根据配置文件来判断实例化消息接口A还是消息接口B,

    工厂实例化后,直接发送消息

    1、消息产品接口

    namespace IBLL
    {
        public interface IMsg
        {
            List<Model.Msg> GetMsgList();
        }
    }
    View Code

    2、消息A实现

       public class Msg:IBLL.IMsg
        {
            public List<Model.Msg> GetMsgList()
            {
                //DALFactory.SimpleDALFactory DAL = new DALFactory.SimpleDALFactory();
                //return DAL.GetBLLMsg().GetMsgList();
                List<Model.Msg> userList = new List<Model.Msg>() 
                {
                    new Model.Msg(){MsgId=Guid.NewGuid().ToString()},
                    new Model.Msg(){MsgId=Guid.NewGuid().ToString()}
                };
                return userList;
            }
        }
    View Code

    3、消息B实现

       public class Msg:IBLL.IMsg
        {
            public List<Model.Msg> GetMsgList()
            {
                //DALFactory.SimpleDALFactory DAL = new DALFactory.SimpleDALFactory();
                //return DAL.GetBLLMsg().GetMsgList();
                List<Model.Msg> userList = new List<Model.Msg>() 
                {
                    new Model.Msg(){MsgId=Guid.NewGuid().ToString()},
                    new Model.Msg(){MsgId=Guid.NewGuid().ToString()}
                };
                return userList;
            }
        }
    View Code

    4、简单工厂类

    namespace BLLFactory
    {
        /// <summary>
        /// 简单工厂
        /// </summary>
        public class SimpleBLLFactory
        {
            //public IBLL.IUsers GetUserBLL()
            //{
            //    string bll = ConfigurationManager.AppSettings["BLL"].ToString();
            //    switch (bll)
            //    {
            //        case "BLLA":
            //            return new BLLA.Simple.Users();
            //        case "BLLB":
            //            return new BLLB.Simple.Users();
    
            //    }
            //    return null;
            //}
    
            public IBLL.IMsg GetMsgBLL()
            {
                string bll = ConfigurationManager.AppSettings["BLL"].ToString();
                switch (bll)
                {
                    case "BLLA":
                        return new BLLA.Simple.Msg();
                    case "BLLB":
                        return new BLLB.Simple.Msg();
    
                }
                return null;
            }
        }
    }
    View Code

    5、客户端调用

    namespace Web
    {
        /// 和抽象工厂的区别:
        ///     1、简单工厂的不用业务类返回的时候,必须写单独的业务方法进行返回
        ///     2、客户端调用的时候,必须定义不用的工厂实现方法
        ///     3、如。new人员工厂实例   new消息工厂实例
        public partial class SimpleFactory : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                ////调用工厂接口
                ////人员信息
                //BLLFactory.SimpleBLLFactory DAL = new BLLFactory.SimpleBLLFactory();
                //List<Model.Users> listUsers = DAL.GetUserBLL().GetUserList();
    
                //foreach (Model.Users user in listUsers)
                //{
                //    Response.Write("UserId=[" + user.UserId + "]====UserName=[" + user.UserName + "]====AccountName=[" + user.AccountName + "]</br>");
                //}
                /*
                 *调用工厂接口
                 *消息信息
                 */
                BLLFactory.SimpleBLLFactory Msg = new BLLFactory.SimpleBLLFactory();
                List<Model.Msg> listMsg = Msg.GetMsgBLL().GetMsgList();
    
                foreach (Model.Msg msg in listMsg)
                {
                    Response.Write("MsgId=[" + msg.MsgId + "]</br>");
                }
    
            }
        }
    }
    View Code

     具体项目结构

  • 相关阅读:
    django orm
    CentOS7.4 安装mongodb
    Django之logging日志
    Python virtualenv虚拟环境
    不能通过IP访问Docker容器里的Django服务器
    docker学习7-Dockerfile制作自己的镜像文件
    docker学习6-docker-compose容器集群编排
    docker学习5-docker安装tomcat环境和部署war包
    docker学习4-docker安装mysql环境
    深度学习和神经网络的区别
  • 原文地址:https://www.cnblogs.com/happygx/p/3762240.html
Copyright © 2020-2023  润新知