求职技术题目收集④ -- 设计模式
一、抽象工厂模式
去年这个时候,博客园好多关于设计模式的文章,自己也想鼓捣在项目上用个啥模式。当时,学校的服务器没有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项目开发。
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!