设计模式(2)-简单工厂模式

来源:互联网 发布:linux开启无线网卡状态 编辑:程序博客网 时间:2024/06/05 11:54

工厂模式分为简单工厂模式、工厂模式和抽象工厂模式三种。本来想一篇文章写完来着。结果看来看去,发现其实虽然都叫工厂模式,但是每个模式都不简单。想想算了,还是分开写吧。饭还得一口一口的吃,尽管我已经是一个胖子了。


说实话,真心感觉简单工厂模式其实算是一个异类。不过相比不用简单工厂模式,还是要强一些的。他的先进之处在哪呢?咱们先看代码。

    public class OracleHelper    {        public OracleConnection conn = null;        public OracleHelper()        {             conn = new OracleConnection();        }    }    public class SQLHelper    {        public SqlConnection conn = null;        public SQLHelper()        {            conn = new SqlConnection();        }    }    public class OleHelper    {        public OleDbConnection conn = null;        public OleHelper()        {            conn = new OleDbConnection();        }    }

这是三个数据连接的类。如果使用平常的方式,那么我获取connection对象的话,就需要采用如下的方式获取了。

            OracleConnection oraConn = new OracleHelper().conn;            SqlConnection sqlConn = new SQLHelper().conn;            OleDbConnection oleConn = new OleHelper().conn;

如果,增加一个新的数据库,那就悲催了。需要把所有的代码全部改一遍,这样好么?骚年,千万别以为那是以后的事。你如果这么想,那么很可能你就会掉进自己的挖的坑里。可能就在明天,你就需要改变的程序了。那样,你就悲催了。哇哈哈哈。


那么怎么做呢?简单工厂模式,可以让你的调用简单了那么一点点,只要通过一个参数就可以实现了。那么,如何实现呢。只需要增加一个简单工厂类。

    public class ConnFactory    {        public static IDbConnection CreateDbConnection(string strType)        {            IDbConnection conn = null;            switch (strType)            {                case "SQLSERVER":                    conn = new SQLHelper().conn;                    break;                case "ORACLE":                    conn = new OracleHelper().conn;                    break;                case "ACCESS":                    conn = new OleHelper().conn;                    break;                default:                    throw new Exception("数据库类型目前不支持!");            }            return conn;        }    }

这样的话,我只要这样调用就可以了。

            IDbConnection oraConn = ConnFactory.CreateDbConnection("ORACLE");            IDbConnection sqlConn = ConnFactory.CreateDbConnection("SQLSERVER");            IDbConnection oleConn = ConnFactory.CreateDbConnection("ACCESS");

这样好些了吧?需要什么类型的数据库连接,只要传参数过去就可以了。

但是,如果要新增数据库的话,就需要修改ConnFactory类中的CreateDbConnection方法了。

这样貌似也不是很好。而且还记得我们的设计原则么?对扩展开放,对修改封闭。这样貌似也不太好。

这就是简单工厂模式的缺点了。

简单工厂模式的优点是:

1、实现了创建和使用分离;
2、调用方无需知道所创建的类的类名,只需要知道所对应的参数即可。


但是缺点也是挺明显的:

1、ConnFactory类职责过重。一旦需要添加新的数据库,则需要修改CreateDbConnection逻辑。这样违背了OCP(开放-关闭原则);

2、由于使用了static方法,造成Factory无法形成基于继承的结构。


所以简单工厂模式只适用于变化较少的情况。具体要是应用于多变的情况,还是要使用其他工厂模式的。

其他工厂模式是怎么样的呢?我们下回分解。



知行办公,专业移动办公平台
 https://zx.naton.cn/
【总监】十二春秋之,3483099@qq.com;
【Master】zelo,616701261@qq.com;
【运营】运维艄公,897221533@qq.com;
【产品设计】流浪猫,364994559@qq.com;
【体验设计】兜兜,2435632247@qq.com;
【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;
【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com;
【java】首席工程师MR_W,feixue300@qq.com;
【测试】土镜问道,847071279@qq.com;
【数据】fox009521,42151960@qq.com;
【安全】保密,你懂的。











阅读全文
0 0
原创粉丝点击