定义:封装改变,既然要封装改变,天然也就要找到须要更改的代码,而后将须要更改的代码用类来封装,这样的思路就是咱们简单工厂模式的实现方式了html
下面咱们经过一则小故事来简述一下咱们在项目中为何要使用简单工厂模式mysql
橙子同窗正在兴高采烈的逛着博客园,学习着大佬的一些操做,忽然发现微信闪动了一下。点开一看,然来是万恶的产品经理给橙子同窗发来一条消息,说有个新的需求须要橙子同窗来实现一些,巴拉巴拉一大堆,在最后和橙子同窗说因为最近经济不景气,公司要节约开支,因此在数据库方面咱们就选用mysql数据库吧。(ps:橙子同窗心想:抠门的公司,在项目开发上都不舍得花钱,怪不得这个月的水果日没了),橙子同窗微笑着对产品经理说,好的,听从公司的安排。就进入了项目开发。
熬到次日早上九点。双眼失神的对产品经理说。产品完成了,数据库也是使用的mysql数据库,我先回去休息了,产经理品先浏览了一遍产品功能,就说,橙子同窗仍是厉害了,不过数据库方面可能须要稍微改一下,因为第三方要求咱们使用sqlserver数据库。橙子同窗愣了一会(心里ps:唉,果真是万恶的产品经理),也没有和产品经理争论,毕竟程序员的高傲仍是要有的。因而橙子同窗开启了第二次的编码过程git
代码示例程序员
调用方github
class Program { static void Main(string[] args) { Console.WriteLine("*******mysql链接"); var mysqlSimpleFactory = DBFactory.CreateConnetion(DBConnetionEnum.Mysql); var mysqlConnection = mysqlSimpleFactory.DBConnection(); Console.WriteLine(mysqlConnection); Console.WriteLine("*******sqlserver链接"); var sqlServerSimpleFactory = DBFactory.CreateConnetion(DBConnetionEnum.SqlServer); var sqlserverConnection = sqlServerSimpleFactory.DBConnection(); Console.WriteLine(sqlserverConnection); Console.ReadKey(); } }
建立数据库工厂,用来返回数据库实例sql
/// <summary> /// 数据库工厂 /// </summary> public class DBFactory { public static ConnetionAbstract CreateConnetion(DBConnetionEnum dBConnetionEnum) { ConnetionAbstract connetion = null; connetion = dBConnetionEnum switch { DBConnetionEnum.Mysql => new MysqlConnetion(), DBConnetionEnum.SqlServer => new SqlServerConnetion(), _ => throw new Exception("数据库类型错误"), }; return connetion; } }
定义链接抽象类数据库
/// <summary> /// 链接抽象类 /// </summary> public abstract class ConnetionAbstract { /// <summary> /// 数据库链接 /// </summary> /// <returns></returns> public abstract string DBConnection(); }
实现mysql数据库链接微信
/// <summary> /// Mysql数据库链接 /// </summary> public class MysqlConnetion : ConnetionAbstract { public override string DBConnection() { return "我是Mysql链接"; } }
实现sqlserver数据库链接ide
/// <summary> /// SqlServer数据库链接 /// </summary> public class SqlServerConnetion : ConnetionAbstract { public override string DBConnection() { return "我是SqlServer链接"; } }
数据库对应枚举sqlserver
/// <summary> /// 数据库链接枚举 /// </summary> public enum DBConnetionEnum { /// <summary> /// mysql /// </summary> Mysql = 0, /// <summary> /// sqlserver /// </summary> SqlServer = 1, }
以上就是橙子同窗最后编写的代码。最后无论第三方要求用什么数据库,橙子同窗只须要在调用的地方进行修改就能够。
最后总结一下使用简单工厂的优势,缺点和使用场景
简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端能够消除直接建立对象的责任,而仅仅是使用。简单工厂模式实现了对责任的分割
简单工厂也起到了代码复用的做用,消费者只须要调用工厂就能够,而不须要直接去参与建立对象
工厂类集中了全部产品建立逻辑,一旦不能正常工做,整个系统都会受到影响
系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,会形成工厂逻辑复杂
当工厂类负责建立的对象比较少时能够考虑使用简单工厂模式
客户若是只知道建立工厂类的参数,对于如何建立对象的逻辑不关心是能够考虑使用简单工厂模式
以上就上橙子同窗和产品经理的第一则小故事啦,让咱们一块儿期待橙子同窗和产品经理的第二则小故事吧
源码github地址:https://github.com/1301536601/DesignMode.git 若有哪里讲得不是很明白或是有错误,欢迎指正 如您喜欢的话不妨点个赞收藏一下吧