C#设计模式(2)-简单工厂模式
来源:互联网 发布:鼎丰汽车租赁软件 编辑:程序博客网 时间:2024/06/11 01:57
引言
上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式;本文将以多数据库操作为例进行讲解;
简单工厂模式简介
什么是简单工厂模式?
定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法模式,它属于创建型模式。
在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类;
应用实例
现在市面上很多种数据库,Oracle、SqlSever、Mysql等;比如我们现在需要写一个通用的数据处理,如新增、更新等操作,能够达到切换任意一个数据库,都能够调用对应版本数据库的的新增或者更新操作;
下面的类图、代码将以数据库操作为实例;
简单工厂模式类图
代码实例
注:这里实例仅做示例,不包含逻辑;
创建数据操作抽象类
以新增、更新为例;
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SimpleFactory{ /// <summary> /// 数据库操作抽象类 /// </summary> public abstract class AbstractDataBaseOpr { /// <summary> /// 新增 /// </summary> public abstract bool Insert(); /// <summary> /// 更新 /// </summary> /// <returns></returns> public abstract bool Update(); }}
Oracle数据操作类
继承上述数据库操作抽象类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SimpleFactory{ /// <summary> /// oracle操作 /// </summary> public class OracleDbOpr : AbstractDataBaseOpr { /// <summary> /// 新增 /// </summary> public override bool Insert() { Console.WriteLine("Oracle新增记录"); return true; } /// <summary> /// 更新 /// </summary> /// <returns></returns> public override bool Update() { Console.WriteLine("Oracle更新记录"); return true; } }}
SqlServer数据操作类
继承上述数据库操作抽象类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SimpleFactory{ /// <summary> /// sqlServer操作 /// </summary> public class SqlServerDbOpr : AbstractDataBaseOpr { /// <summary> /// 新增 /// </summary> public override bool Insert() { Console.WriteLine("SqlServer新增记录"); return true; } /// <summary> /// 更新 /// </summary> /// <returns></returns> public override bool Update() { Console.WriteLine("SqlServer更新记录"); return true; } }}
DB工厂类
这里先定义一个数据库枚举类
1 namespace SimpleFactory 2 { 3 /// <summary> 4 /// 数据库类型枚举 5 /// </summary> 6 public enum DatabaseTypeEnum 7 { 8 /// <summary> 9 /// 数据库类型:SqlServer10 /// </summary>11 SqlServer,12 /// <summary>13 /// 数据库类型:MySql14 /// </summary>15 MySql,16 /// <summary>17 /// 数据库类型:Oracle18 /// </summary>19 Oracle,20 /// <summary>21 /// 数据库类型:Access22 /// </summary>23 Access,24 /// <summary>25 /// 数据库类型:SQLite26 /// </summary>27 SQLite28 }29 }
工厂类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SimpleFactory{ /// <summary> /// DB工厂类 /// </summary> public class DbFactory { /// <summary> /// 创建数据库操作实例 /// </summary> /// <param name="dbType"></param> /// <returns></returns> public static AbstractDataBaseOpr Create(DatabaseTypeEnum dbType) { AbstractDataBaseOpr dbOpr = null; switch (dbType) { case DatabaseTypeEnum.Oracle: dbOpr = new OracleDbOpr(); break; case DatabaseTypeEnum.SqlServer: dbOpr = new SqlServerDbOpr(); break; } return dbOpr; } }}
业务调用
oracle数据库和sqlserver数据库操作分别调用
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using SimpleFactory;namespace SimpleFactory{ class Program { static void Main(string[] args) { //oracle操作 AbstractDataBaseOpr dbOpr1 = DbFactory.Create(DatabaseTypeEnum.Oracle); dbOpr1.Insert(); dbOpr1.Update(); Console.WriteLine("-----------------------------------------"); //SqlServer操作 AbstractDataBaseOpr dbOpr2 = DbFactory.Create(DatabaseTypeEnum.SqlServer); dbOpr2.Insert(); dbOpr2.Update(); Console.ReadKey(); } }}
调用结果
简单工厂模式的优缺点
优点
- 简单工厂模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。
- 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的的参数即可。
缺点
- 工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。
- 增加新产品必须修改工厂角色的源码,同时需要增加产品实现类;
阅读全文
0 0
- C#设计模式(2)简单工厂模式
- C#设计模式(2)-简单工厂模式
- c#设计模式-简单工厂
- C# 简单工厂设计模式
- C#简单工厂设计模式
- C#设计模式--简单工厂
- C#设计模式之简单工厂模式
- c#设计模式之简单工厂模式
- c#设计模式--简单工厂模式
- 设计模式之C#简单工厂模式
- C#设计模式之简单工厂模式
- C#设计模式00-简单工厂模式
- 【C# 设计模式-简单工厂模式 】
- c#设计模式之简单工厂模式
- C#设计模式--简单工厂模式
- C#设计模式之简单工厂模式
- C#设计模式 简单工厂模式
- C#设计模式(2)——简单工厂模式
- MySQL基础表操作---IO操作(二)
- 51Nod-1000-A+B
- html5canvers中的按钮
- ecplise使用及配置
- sql语句快速清空表
- C#设计模式(2)-简单工厂模式
- DataTable转成List集合
- iOS进阶:Objective-C底层原理
- 51nod 1010 只包含因子2 3 5的数
- 在Android上实现HttpServer
- 接口测试基础笔记
- Git合并单个文件
- 2017年Java开发岗位面试题归类
- 批处理批量该文件名