首页 > 其他分享 >工厂模式-简单工厂模式

工厂模式-简单工厂模式

时间:2023-04-23 13:47:23浏览次数:24  
标签:return string cmd 模式 工厂 简单 public conn

工厂模式

工厂顾名思义就是创建产品,本质就是用工厂方法代替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

相关文章

  • vue学习 第四天 css ---元素显示模式 display
     导学: 1)设置元素显示模式display2)block(块)、inline(行内)、inline-block(行内块)3)每一种元素模式的特点 1、元素显示模式:  独占一行 (块元素)和 共用一行(行内元素)HTML元素一般分为块元素和行内元素两个类型。 2、块元素:<h1>~<h6>、<p>、<div......
  • 可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!
    可视化大屏适配/自适应现状可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件、工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无法做到完美的效果,做出来的东西都差不多,最终实现效果都逃不出白边的手掌心,可以解决白边问题的,要么太......
  • 力扣844(Java)-比较含退格的字符串(简单)
    题目:给定s和t两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。 示例1:输入:s="ab#c",t="ad#c"输出:true解释:s和t都会变成"ac"。示例2:输入:s="ab##",t="c#d#"输出:true......
  • sdl2实现简单的登录页面
    #include<SDL.h>#include<SDL_ttf.h>#include<iostream>#include<string>intmain(intargc,char*args[]){  if(SDL_Init(SDL_INIT_VIDEO)<0)  {    std::cerr<<"SDL初始化失败,错误信息:"<<SDL_GetError()&l......
  • bootstrap日期插件datetimepicker的简单使用
    <!DOCTYPEHTML><html><head><linkhref="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css"rel="stylesheet"><linkrel="stylesheet"type="text/cs......
  • 纸箱加工厂如何在手机端实时监控印刷机工作状态
    纸箱是一种十分常见的物流包装产品。随着物流行业的飞速发展,纸箱印刷也在向着数字化方向转型,通过设备不同的纸箱外观尺寸,实现个性化内容的印制,提升不同产品美化观感和客户满意度。现代化的印刷模式实现自动化、数字化印刷,带来更高的生产效率和更强的结构设计能力,高速完成订单交付。......
  • 详解Redis三大集群模式,轻松实现高可用!
    1.Redis集群简介1.1什么是Redis集群Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式:主从复制模式(Master-Slave)、哨......
  • 16.InnoDB Cluster 简单搭建
    1.主机规划列表、iphostname主机角色安装软件192.168.10.134db01mastermysql、myshell192.168.10.130db02slavemysql、myshell192.168.10.131db03slavemysql、myshell192.168.10.132db04managermyshell、myrouter      2.......
  • 【IT老齐002】MySQL集群模式与应用场景
    【IT老齐002】MySQL集群模式与应用场景单库模式优点简单粗暴适合数据量干万以下小型应用企业网站,创业公司首选缺点不具备可用性与并发性读写分离集群模式读写分离中间件insert、update、delete负载均衡到从库select路由到主库MySQL主从复制binlog......
  • 简单粗暴的oracle数据库跨平台迁移
    源端:windows平台,oracle版本:11.2.0.4目标端:linux平台,oracle版本:11.2.0.4,数据文件路径:/data/orcl测试环境下,数据量不大,有足够的停机窗口时间由于rman跨平台迁移不支持11g版本,正好测试一下最原始、最简单粗暴的迁移方式思路:直接复制数据文件、日志文件1、确认linux平台数据库版本、实......