zoukankan      html  css  js  c++  java
  • 求职技术题目收集④ 设计模式

    一、抽象工厂模式

         去年这个时候,博客园好多关于设计模式的文章,自己也想鼓捣在项目上用个啥模式。当时,学校的服务器没有Sql Server。所有的数据库都是Access,于是就想了工厂模式,最后还是弄成了抽象工厂模式。

         关于抽象工厂的学习一搜一大把,大家可以看园子里朋友的:http://www.cnblogs.com/anlyren/archive/2008/01/31/abstract_factory.html

         我是在一个考试系统中实现了这个模式。

     具体代码

         抽象工厂角色:

     public abstract class AbstractDALFactory
        {  
            static  private string _dbType = ConfigurationManager.AppSettings["DBType"].ToString();    //获得数据库对象实例
            static private AbstractDALFactory _instance = null;
            
            static public AbstractDALFactory Instance
            {
                get
                {
                    if (_instance == null)
                        _instance = (AbstractDALFactory)Activator.CreateInstance(Type.GetType(_dbType));      //利用反射创建数据库对象的实例
                    return _instance;
                }
            }
            
            public abstract ISingleP CreateSingleProblemService();  //创建单选题
    
            public abstract IMultiP CreateMultiProblemService(); //创建多选题
    
            public abstract IJudgeP CreateJudgeProblemService(); //创建判断题
    
        }

         单选题接口(抽象产品):

     public interface ISingleP
        {
            IList<SingleProblem> GetSingleProblem();
    
            IList<SingleProblem> SelectSingleProblem();
    
            bool InsertSingleProblem(SingleProblem SP);
    
            bool UpdateSingleProblem(SingleProblem sp);
    
            bool DeleteSingleProblem(int SP_ID);
    
            bool ProblemCount(int id);
    
            void AddExcel(string filePath);
    
            SingleProblem GetProblemByID(int id);
        }
    
    

        SqlServer工厂(具体工厂):

     public class SqlDALFactory:AbstractDALFactory
        {
            public override IJudgeP CreateJudgeProblemService()
            {
                return new JudgeProbmeService();
            }
    
            public override ISingleP CreateSingleProblemService()
            {
                return new SingleProblemService();
            }
    
            public override IMultiP CreateMultiProblemService()
            {
                return new MultiProblemService();
            }
        }
    

         单选题实现(具体产品):

     public class SingleProblemService:ISingleP
        {
            private static string connString = PubConstant.ConnectionString;
    
            public SingleProblemService()
            {
                //
                //TODO: 在此处添加构造函数逻辑
                //
            }
    
            public IList<SingleProblem> GetSingleProblem()
            {
                   SingleProblem info = new SingleProblem();
                   return infos;
            }
    
            public SingleProblem GetProblemByID(int id)
            {
                SingleProblem info = new SingleProblem();
                return info;
            }
    
            public IList<SingleProblem> SelectSingleProblem()
            {
                IList<SingleProblem> infos = new List<SingleProblem>();
                return infos;
            }
    
            public bool InsertSingleProblem(SingleProblem SP)
            {
                    return (ret == 1);
            }
    
            public bool UpdateSingleProblem(SingleProblem sp)
            {
                    return (ret == 1);
            }
    
            public bool DeleteSingleProblem(int SP_ID)
            {
                        return (ret == 1);
            }
    
    
            public bool ProblemCount(int id)
            {
                           return (ret == 1);
                }
            }
    
            public void AddExcel(string filePath)
            {
            }
        }

          获取写在web.config中的字串方法:

        public class PubConstant
        {        
            /// <summary>
            /// 获取连接字符串
            /// </summary>
            public static string ConnectionString
            {           
                get 
                {
                    string _connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                    string ConStringEncrypt = ConfigurationManager.AppSettings["ConStringEncrypt"];
                    if (ConStringEncrypt == "true")
                    {
                        _connectionString = DESEncrypt.Decrypt(_connectionString);
                    }
                    return _connectionString; 
                }
            }
        }

        web.config配置:

     <appSettings>
      <add key="DBType" value="EO.DAL.DALFactory.SqlDALFactory"/>
      <add key="ConnectionString" value="Data Source=.;Initial Catalog=Photography; User ID=sa;Password="/>
     </appSettings>

     业务逻辑层代码(客户端代码):

     public class SingleProblemManager
        {
            private static AbstractDALFactory factory = AbstractDALFactory.Instance;
            private static ISingleP Isingle = factory.CreateSingleProblemService();
    
            public static IList<SingleProblem> GetSingleProblem()
            {
                return Isingle.GetSingleProblem();
            }
    
            public static IList<SingleProblem> SelectSingleProblem()
            {
                return Isingle.SelectSingleProblem();
            }
    
            public static IList<SingleProblem> GetWrongSingleProblem(int[] ids)
            {
                IList<SingleProblem> infos = new List<SingleProblem>();
                for (int i = 0; i < ids.Length; i++)
                {
                    SingleProblem info = new SingleProblem();
                    info = Isingle.GetProblemByID(ids[i]);
                    infos.Add(info);
                }
                return infos;
            }
    
            public static bool UpdateSingleProblem(SingleProblem sp)
            {
                return Isingle.UpdateSingleProblem(sp);
            }
    
            public static bool DeleteSingleProblem(int sp)
            {
                return Isingle.DeleteSingleProblem(sp);
            }
    
            public static bool InsertSingleProblem(SingleProblem sp)
            {
                return Isingle.InsertSingleProblem(sp);
            }
    
            public static bool CountProblem(int id)
            {
                return Isingle.ProblemCount(id);
            }
    
            public static void AddExcel(string filePath)
            {
                Isingle.AddExcel(filePath);
            }
        }
    

     

    作  者:doku
    出  处:http://www.cnblogs.com/kulong995/
    关于作者:喜欢编程,喜欢美食,专注于.NET项目开发。
    版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!

  • 相关阅读:
    eclipse 开始运行提示 Java was started but returned exit code=13
    c# silverlight
    CSS 文本、字体、链接
    IIS8中添加WCF支持几种方法小结[图文]
    CSS 背景
    如何创建 CSS
    CSS 简介、语法、派生选择器、id 选择器、类选择器、属性选择器
    HTML 5 服务器发送事件、Input 类型、表单元素、表单属性
    HTML 5 Web 存储、应用程序缓存、Web Workers
    asp.net运行时(二)httpHandle
  • 原文地址:https://www.cnblogs.com/kulong995/p/1680475.html
Copyright © 2011-2022 走看看