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


浙公网安备 33010602011771号