求职技术题目收集④ -- 设计模式
一、抽象工厂模式
去年这个时候,博客园好多关于设计模式的文章,自己也想鼓捣在项目上用个啥模式。当时,学校的服务器没有Sql Server。所有的数据库都是Access,于是就想了工厂模式,最后还是弄成了抽象工厂模式。
关于抽象工厂的学习一搜一大把,大家可以看园子里朋友的:http://www.cnblogs.com/anlyren/archive/2008/01/31/abstract_factory.html
我是在一个考试系统中实现了这个模式。
具体代码
抽象工厂角色:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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(); //创建判断题 } |
单选题接口(抽象产品):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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工厂(具体工厂):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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(); } } |
单选题实现(具体产品):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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中的字串方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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>
业务逻辑层代码(客户端代码):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 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项目开发。
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?