标签:实例 枚举类 ram 一个数据库 break singleton data type rdb
上一遍中介绍了设计模式中的单例模式-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(); } }
继承上述数据库操作抽象类
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; } } }
继承上述数据库操作抽象类
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; } } }
这里先定义一个数据库枚举类
1 namespace SimpleFactory 2 { 3 /// <summary> 4 /// 数据库类型枚举 5 /// </summary> 6 public enum DatabaseTypeEnum 7 { 8 /// <summary> 9 /// 数据库类型:SqlServer 10 /// </summary> 11 SqlServer, 12 /// <summary> 13 /// 数据库类型:MySql 14 /// </summary> 15 MySql, 16 /// <summary> 17 /// 数据库类型:Oracle 18 /// </summary> 19 Oracle, 20 /// <summary> 21 /// 数据库类型:Access 22 /// </summary> 23 Access, 24 /// <summary> 25 /// 数据库类型:SQLite 26 /// </summary> 27 SQLite 28 } 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(); } } }
标签:实例 枚举类 ram 一个数据库 break singleton data type rdb
原文地址:http://www.cnblogs.com/yx007/p/SimpleFactoryPattern.html