Fork me on GitHub

求职技术题目收集④ -- 设计模式

一、抽象工厂模式

     去年这个时候,博客园好多关于设计模式的文章,自己也想鼓捣在项目上用个啥模式。当时,学校的服务器没有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);
        }
    }

 

posted @ 2010-03-07 23:49  idoku  阅读(220)  评论(0编辑  收藏  举报