点击这里查看全部设计模式系列文章导航

引言

上一遍中介绍了设计模式中的单例模式-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工厂类

这里先定义一个数据库枚举类

 namespace SimpleFactory
{
/// <summary>
/// 数据库类型枚举
/// </summary>
public enum DatabaseTypeEnum
{
/// <summary>
/// 数据库类型:SqlServer
/// </summary>
SqlServer,
/// <summary>
/// 数据库类型:MySql
/// </summary>
MySql,
/// <summary>
/// 数据库类型:Oracle
/// </summary>
Oracle,
/// <summary>
/// 数据库类型:Access
/// </summary>
Access,
/// <summary>
/// 数据库类型:SQLite
/// </summary>
SQLite
}
}

工厂类

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();
}
}
}

调用结果

简单工厂模式的优缺点

优点

  • 工厂类中包含了必要的判断逻辑,根据客户端选择条件,动态实例化相关的类。
  • 简单工厂模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。
  • 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的的参数即可。

缺点

  • 工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。
  • 增加新产品必须修改工厂角色的源码,同时需要增加产品实现类;

C#设计模式(2)-简单工厂模式的更多相关文章

  1. C#设计模式(2)——简单工厂模式(转)

    C#设计模式(2)——简单工厂模式   一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...

  2. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  3. 设计模式之简单工厂模式(Simple Factory)

    原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...

  4. iOS设计模式 - (3)简单工厂模式

    iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/ ...

  5. 设计模式之简单工厂模式Simple Factory(四创建型)

    工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...

  6. php实现设计模式之 简单工厂模式

    作为对象的创建模式,用工厂方法代替new操作. 简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂 ...

  7. [python实现设计模式]-3.简单工厂模式-触宝开放平台

    预备知识: 开放封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open ...

  8. C++实现设计模式之 — 简单工厂模式

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4251756.html 所谓简单工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字 ...

  9. C#设计模式之简单工厂模式

    简单工厂模式解释:  简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一 ...

随机推荐

  1. Redux-Saga学习心得

    # Redux Saga ## 简述- Reducers负责处理action的state更新:- Sagas负责协调那些复杂或异步的操作. ## 安装 npm install --save redux ...

  2. http(一)web和网络基础

    深入学习http不为别的,只为补充底层知识,打好根基,深入了解其他技术,擒贼先擒王,学好九阳神功以后,乾坤大挪移,太极剑就容易了,急于求成,就只能变周芷若.走着...... 来源于:图解HTTP 1. ...

  3. Java基础----jdk1.8 反射实验

    (写在最前:还没入门的搬砖工的一本正经的胡说八道) 引言:  最近做到的项目中,需要给对接方提供一个公共接口,根据对方传入的XML文件的rootelement分发调用接口,最简单的使用if-else ...

  4. VI修改文件

    找到路径   vi  文件名    i  添加或修改 esc   :  wq  保存退出     --------------------------------------------------- ...

  5. Java jvm级别native关键词、JNI详解

    1.native关键词的引入 再完美的编程语言也有自己的不足之处,当然Java也不例外,Java的不足之处除了体现在运行速度(这点往往被一些其他编程语言使用者所诟病)上要比传统的C++慢许多之外,Ja ...

  6. 不用EF框架,完成完美实体映射,且便于维护!(AutoMapper,petapoco)

    最近,需要搭建一个新项目,在需求分析时确定数据库中需要创建多个存储过程.所以如果还是用原来EF框架生成ADO.net实体模型的话,不利于修改. 主要是解决以下两个问题: 1.比如前端需要一个值,如果存 ...

  7. (转载)Oracle10g 数据泵导出命令 expdp 使用总结(三)

    原文链接:http://hi.baidu.com/edeed/item/19aa0df856da3e19a6298894 Oracle10g 数据泵导出命令 expdp 使用总结(一) 14. JOB ...

  8. VB6之WM_COPYDATA

    WM_COPYDATA消息是一种进程间通信的一种方式,参考文档如下: http://msdn.microsoft.com/en-us/library/windows/desktop/ms649011( ...

  9. 如何将App程序发布到苹果App Store

    原文网上抄录 发布步骤登陆苹果开发者中心http://developer.apple.com(99美元账号)进入itunes connect选择Manage Your Apps选择Add New Ap ...

  10. JS数组例子

    输入10个成绩,求总和,最高和最低 var arr=new Array(97,56,67,56,77,78,67,76,89,98); var sum=0; var minx=100; var max ...