工厂模式
工厂顾名思义就是创建产品,本质就是用工厂方法代替new
操作创建一种实例化对象的方式。根据不同的实现方式和抽象级别又可分为简单工厂,工厂方法和抽象工厂三种模式。
案例
需求
封装一个SqlHelper类,实现对SqlServer的操作,且后续可能需要同时支持SqlServer,MySql,Oracle等主流数据库。
UML类图
简单工厂
定义
简单工厂又叫做静态工厂方法模式,但不属于23种设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
UML类图
优缺点
-
优点
- 实现了对责任的分割,隔离了变化,因为它提供了专门的工厂类用于创建对象。
- 通过配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。
-
缺点
- 集中了所有实例的创建逻辑,违反了单一职责原则
- 扩展困难,一旦添加新产品就不得不修改工厂逻辑,违反了开闭原则
代码:
1.Program.cs
public class Program
{
static void Main(string[] args)
{
SqlHelper sqlHelper = new SqlHelper();
string selectSql = "select count(*) from Persons;";
object count = sqlHelper.ExecuteScalar(selectSql);
Console.WriteLine($"共有{count}记录");
}
}
2.SqlHelper.cs
public class SqlHelper
{
/// <summary>
/// 增删改操作,返回影响条数
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int ExecuteNonQuery(string sql)
{
using (DbConnection conn = DbConnectionFactory.CreateDbConnection())
{
using (DbCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = sql;
return cmd.ExecuteNonQuery();
}
}
}
/// <summary>
/// 查询操作,返回查询结果中的第一行第一列的值
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public object ExecuteScalar(string sql)
{
using (DbConnection conn = DbConnectionFactory.CreateDbConnection())
{
using (DbCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = sql;
return cmd.ExecuteScalar();
}
}
}
}
3.DbConnectionFactory.cs
public static class DbConnectionFactory
{
private static readonly string _connectionString = "Server=.;Database=demo;uid=sa;pwd="";Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=true;";
private static readonly string _dbType = "Sqlserver";
public static DbConnection CreateDbConnection()
{
if (_dbType == "Sqlserver")
{
return new SqlConnection(_connectionString);
}
else if (_dbType == "MySql")
{
return null;
}
else
{
return null;
}
}
}
运行结果:
本文参考自https://github.com/ZShijun/DesignPattern.git
标签:return,string,cmd,模式,工厂,简单,public,conn From: https://www.cnblogs.com/xiao-wo-niu/p/17346086.html