C# 抽象工厂模式
2016-04-26 17:32
330 查看
工厂抽象以及实体工厂代码如下:
抽象工厂模式:
public abstract class AbstractDALFactory
{
public abstract IAdminService CreateAdminService();
public static AbstractDALFactory ChooseFactory()
{
string dbType = ConfigurationManager.AppSettings["DBType"].ToString();
AbstractDALFactory factory = null;
switch(dbType)
{
case "Sql":
factory = new SqlDALFactory();
break;
case "Access":
factory = new AccessDALFactory();
break;
case "Oracle":
factory = new OracleDALFactory();
break;
}
return factory;
}
}
Access实体工厂:
public class AccessDALFactory : AbstractDALFactory
{
public override IAdminService CreateAdminService()
{
return new AdminService();
}
}
Oracle实体工厂:
public class OracleDALFactory:AbstractDALFactory
{
public override IAdminService CreateAdminService()
{
return new AdminService();
}
}
Sql实体工厂:
public class SqlDALFactory : AbstractDALFactory
{
public override IAdminService CreateAdminService()
{
return new AdminService();
}
}
抽象产品和实体产品的代码如下:
抽象产品:
public interface IAdminService
{
//检测登录用户是否存在
bool CheckAdmin(int id,string pwd);
}
Access实体产品:
public class AdminService:IAdminService
{
#region IAdminService 成员
public AdminService()
{
connstr ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Environment.CurrentDirectory +@"\mydb.mdb";
}
private string connstr;
private OleDbConnection conn = new OleDbConnection();
private void open()
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = connstr;
conn.Open();
return;
}
if (conn.State == ConnectionState.Open)
{
return;
}
}
public bool CheckAdmin(int id, string pwd)
{
open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
//特别注意,sql 语句后面不要添加“;”,会出现异常,0091,无效符号。害的调试半天
cmd.CommandText = "select * from guanli t where t.id ='" + id + "' and t.password = '" + pwd + "'";
object result = null;
try
{
result = cmd.ExecuteScalar();
}
catch (OleDbException ex)
{
Console.WriteLine("wws:" + ex.Message);
return false;
}
if (conn.State == ConnectionState.Open)
conn.Close();
return result != null ? true : false;
}
#endregion
}
Oracle实体产品:
public class AdminService : IAdminService
{
#region IAdminService 成员
private string connstr = "Data Source=mydb;Persist Security Info=True;User ID=heatdb;Password=heatdb";
private OracleConnection conn = new OracleConnection();
private void open()
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = connstr;
conn.Open();
return;
}
if (conn.State == ConnectionState.Open)
{
return;
}
}
public bool CheckAdmin(int id, string pwd)
{
open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
//特别注意,sql 语句后面不要添加“;”,会出现异常,0091,无效符号。害的调试半天
cmd.CommandText = "select * from guanli t where t.id ='" + id + "' and t.password = '" + pwd + "'";
object result = null;
try
{
result = cmd.ExecuteScalar();
}
catch (OracleException ex )
{
Console.WriteLine("wws:"+ex.Message);
return false;
}
if (conn.State == ConnectionState.Open)
conn.Close();
return result != null ? true : false;
}
#endregion
}
sql实体产品:
public class AdminService : IAdminService
{
#region IAdminService 成员
private string connstr = @"Data Source=SUNLIKE\SQLEXPRESS;Initial Catalog=blank;Persist Security Info=True;User ID=sa;Password=sa";
private SqlConnection conn = new SqlConnection();
private void open()
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = connstr;
conn.Open();
return;
}
if (conn.State == ConnectionState.Open)
{
return;
}
}
public bool CheckAdmin(int id, string pwd)
{
open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from guanli where username = '"+id+"' and password = '"+pwd +"';";
object result = cmd.ExecuteScalar();
if (conn.State == ConnectionState.Open)
conn.Close();
return result != null ? true : false;
}
#endregion
}
总结:抽象工厂模式采用抽象工厂和实体工厂,以及抽象产品和实体产品进行模式的划分。
抽象工厂模式:
public abstract class AbstractDALFactory
{
public abstract IAdminService CreateAdminService();
public static AbstractDALFactory ChooseFactory()
{
string dbType = ConfigurationManager.AppSettings["DBType"].ToString();
AbstractDALFactory factory = null;
switch(dbType)
{
case "Sql":
factory = new SqlDALFactory();
break;
case "Access":
factory = new AccessDALFactory();
break;
case "Oracle":
factory = new OracleDALFactory();
break;
}
return factory;
}
}
Access实体工厂:
public class AccessDALFactory : AbstractDALFactory
{
public override IAdminService CreateAdminService()
{
return new AdminService();
}
}
Oracle实体工厂:
public class OracleDALFactory:AbstractDALFactory
{
public override IAdminService CreateAdminService()
{
return new AdminService();
}
}
Sql实体工厂:
public class SqlDALFactory : AbstractDALFactory
{
public override IAdminService CreateAdminService()
{
return new AdminService();
}
}
抽象产品和实体产品的代码如下:
抽象产品:
public interface IAdminService
{
//检测登录用户是否存在
bool CheckAdmin(int id,string pwd);
}
Access实体产品:
public class AdminService:IAdminService
{
#region IAdminService 成员
public AdminService()
{
connstr ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Environment.CurrentDirectory +@"\mydb.mdb";
}
private string connstr;
private OleDbConnection conn = new OleDbConnection();
private void open()
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = connstr;
conn.Open();
return;
}
if (conn.State == ConnectionState.Open)
{
return;
}
}
public bool CheckAdmin(int id, string pwd)
{
open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
//特别注意,sql 语句后面不要添加“;”,会出现异常,0091,无效符号。害的调试半天
cmd.CommandText = "select * from guanli t where t.id ='" + id + "' and t.password = '" + pwd + "'";
object result = null;
try
{
result = cmd.ExecuteScalar();
}
catch (OleDbException ex)
{
Console.WriteLine("wws:" + ex.Message);
return false;
}
if (conn.State == ConnectionState.Open)
conn.Close();
return result != null ? true : false;
}
#endregion
}
Oracle实体产品:
public class AdminService : IAdminService
{
#region IAdminService 成员
private string connstr = "Data Source=mydb;Persist Security Info=True;User ID=heatdb;Password=heatdb";
private OracleConnection conn = new OracleConnection();
private void open()
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = connstr;
conn.Open();
return;
}
if (conn.State == ConnectionState.Open)
{
return;
}
}
public bool CheckAdmin(int id, string pwd)
{
open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
//特别注意,sql 语句后面不要添加“;”,会出现异常,0091,无效符号。害的调试半天
cmd.CommandText = "select * from guanli t where t.id ='" + id + "' and t.password = '" + pwd + "'";
object result = null;
try
{
result = cmd.ExecuteScalar();
}
catch (OracleException ex )
{
Console.WriteLine("wws:"+ex.Message);
return false;
}
if (conn.State == ConnectionState.Open)
conn.Close();
return result != null ? true : false;
}
#endregion
}
sql实体产品:
public class AdminService : IAdminService
{
#region IAdminService 成员
private string connstr = @"Data Source=SUNLIKE\SQLEXPRESS;Initial Catalog=blank;Persist Security Info=True;User ID=sa;Password=sa";
private SqlConnection conn = new SqlConnection();
private void open()
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = connstr;
conn.Open();
return;
}
if (conn.State == ConnectionState.Open)
{
return;
}
}
public bool CheckAdmin(int id, string pwd)
{
open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from guanli where username = '"+id+"' and password = '"+pwd +"';";
object result = cmd.ExecuteScalar();
if (conn.State == ConnectionState.Open)
conn.Close();
return result != null ? true : false;
}
#endregion
}
总结:抽象工厂模式采用抽象工厂和实体工厂,以及抽象产品和实体产品进行模式的划分。
相关文章推荐
- 记住密码超简单实现(C#)
- [No000086]C#foreach集合被改变,报错处理方案
- [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
- C#接口作用的深入理解
- C#基础--.net平台的重要组成部分以及.net程序简单的编译原理
- C# octet单位的缘来
- C#委托和事件详解
- Webdriver(selenium2.0)+NUnit+C# (二)
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE 10
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE9.3
- C#的System.ICloneable接口说明
- C#中 Thread.Sleep精度问题
- C#通过托管调用Win32 api获取键盘状态
- C# 指定模板 并导出Excel
- C#6.0 十大常用特性
- c# office转换成pdf
- 读取注册表键值
- datatable分组 C#
- 【FileInfo】
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)