深入学习《大话设计模式》 简单工厂模式

简单工厂模式

定义:封装改变,既然要封装改变,自然也就要找到需要更改的代码,然后将需要更改的代码用类来封装,这样的思路就是我们简单工厂模式的实现方式了

下面我们通过一则小故事来简述一下我们在项目中为什么要使用简单工厂模式

背景

橙子同学正在兴高采烈的逛着博客园,学习着大佬的一些操作,突然发现微信闪动了一下。点开一看,然来是万恶的产品经理给橙子同学发来一条消息,说有个新的需求需要橙子同学来实现一些,巴拉巴拉一大堆,在最后和橙子同学说由于最近经济不景气,公司要节约开支,所以在数据库方面我们就选用mysql数据库吧。(ps:橙子同学心想:抠门的公司,在项目开发上都不舍得花钱,怪不得这个月的水果日没了),橙子同学微笑着对产品经理说,好的,遵从公司的安排。就进入了项目开发。
熬到第二天早上九点。双眼失神的对产品经理说。产品完成了,数据库也是使用的mysql数据库,我先回去休息了,产经理品先浏览了一遍产品功能,就说,橙子同学还是厉害了,不过数据库方面可能需要稍微改一下,由于第三方要求我们使用sqlserver数据库。橙子同学愣了一会(内心ps:唉,果然是万恶的产品经理),也没有和产品经理争论,毕竟程序员的高傲还是要有的。于是橙子同学开启了第二次的编码过程

代码示例

调用方

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

创建数据库工厂,用来返回数据库实例

/// <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数据库连接

/// <summary>
    /// SqlServer数据库连接
    /// </summary>
     public class SqlServerConnetion : ConnetionAbstract
    {
        public override string DBConnection()
        {
            return "我是SqlServer连接";
        }
    }

数据库对应枚举

/// <summary>
    /// 数据库连接枚举
    /// </summary>
    public enum DBConnetionEnum
    {
        /// <summary>
        /// mysql
        /// </summary>
        Mysql = 0,

        /// <summary>
        /// sqlserver
        /// </summary>
        SqlServer = 1,

    }

以上就是橙子同学最后编写的代码。最后不管第三方要求用什么数据库,橙子同学只需要在调用的地方进行修改就可以。

最后总结一下使用简单工厂的优点,缺点和使用场景

简单工厂模式优点

  • 简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是使用。简单工厂模式实现了对责任的分割

  • 简单工厂也起到了代码复用的作用,消费者只需要调用工厂就可以,而不需要直接去参与创建对象

简单工厂模式缺点

  • 工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都会受到影响

  • 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,会造成工厂逻辑复杂

(0)

相关推荐

  • 面向对象23种设计模式系列(一)- 创建型设计模式

    本章是面向对象23种设计模式系列开篇,首先我们来看下什么是设计模式? 面向对象23种设计模式: 1.面向对象语言开发过程中,遇到的种种场景和问题,提出了解决方案和思路,沉淀下来就变成了设计模式. 2. ...

  • 设计模式学习笔记 ———— 简单工厂模式

    # 背景 简单工厂模式是很多程序员学习的第一个设计模式,因为其不但原理简单而且易于上手,在日常工作的代码中也常有体现.今天分享一个基于实现"加"."减".&qu ...

  • 大话设计模式笔记(一)の简单工厂模式

    概要 一个好的程序猿/媛敲出来的代码应该是可维护.可复用.可扩展的,也就是具有较好的灵活性. 为了达到以上目的,在还没敲代码之前,需要事先考虑通过何种方式能够使自己的程序的耦合度降低,最基本的便是面向 ...

  • PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  • [PHP小课堂]PHP设计模式之简单工厂模式

    PHP设计模式之工厂方法模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 【C++设计模式一】C++简单工厂模式

    (1)定义 定义一个简单工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类. (2)结构 简单工厂模式有以下的结构: 工厂(Factory):根据客户提供的具体产品类的参数 ...

  • 【重温设计模式】之002简单工厂模式

    [重温设计模式系列源码] 简单工厂模式 基本原理 含义 简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法). 在现实生活中,工厂是生产产品的, 同样的,在设计模式中,一个负责生产" ...

  • 【设计模式】简单工厂模式

    定义 通过工厂类提供的方法,创建不同的派生类 通常创建的类都具有共同的基类/接口 优缺点 优点 客户端与具体的实现类解耦 缺点 新增产品需要修改原来工厂类的方法,不符合开闭原则 角色 客户端 --&g ...

  • PHP设计模式—工厂模式之简单工厂模式

    定义: 简单工厂模式:将调用者和创建者分离,实现解耦,调用者直接向工厂请求,通过工厂去选择需要实例化的对象,用一个单独的类来做这个创建实例的过程. 代码实例: 问题:假设一个关于个人事务管理的项目中有 ...

  • 【6/25】使用简单工厂模式(Simple Factory Pattern)改写Page基类

    这是<小游戏从0到1设计模式重构>系列内容第6篇,所有源码及资料在"程序员LIYI"公号回复"小游戏从0到1"获取. 工厂模式有三个姐妹:简单工厂模 ...