为了账号安全,请及时绑定邮箱和手机立即绑定

实际开发中哪些场景需要用到工厂模式?

实际开发中哪些场景需要用到工厂模式?

肥皂起泡泡 2018-08-03 10:50:34
工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。工厂模式简单工厂模式抽象工厂模式请问实际开发中哪些情况下会用到它?为什么我感觉我现在开发很少会用到这些设计模式啊。。。
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

不论是工厂模式还是其它创建型模式,都是一个目的——为了初始化一个对象。或者说,为了构建一个数据结构模型(类和对象本身就是一种自定义的数据结构)。

那么,问题来了,为什么有 new 这样方式可以创建一个对象,还要使用设计模式。本质上就是一个原因,不想让上层使用者直接使用 new 来初始化对象。

这样的原因有很多,绝大多数原因就是对上层的使用者隔离对象创建的过程;或者是对象创建的过程复杂,使用者不容易掌握;或者是对象创建要满足某种条件,这些条件是业务的需求也好,是系统约束也好,没有必要让上层使用者掌握,增加别人开发的难度。

所以,到这时我们应该清楚了,无论是工厂模式,还是上面的战友说的开闭原则,都是为了隔离一些复杂的过程,使得这些复杂的过程不向外暴露,如果暴露了这些过程,会对使用者增加麻烦,这也就是所谓的团队合作。

面向对象封装的本身也就是为了使得对外的 API 尽可能的简化。

例如,你定义了一个 Status字段,但这个字段因为某些业务原因,需要使用整数来表示状态。那么,如果数字少了还好办,如果数字多了,上层使用者就不一定能记清楚每个数字代表的状态(比如你要做语音通信系统,那么,语音设备是有很多状态数字的)。这时,如果使用 new来创建对象,然后再对 Status 进行赋值,不可避免的,可能要查阅开发文档,或者会不小心给出一个错误的值。这时,你就不妨使用工厂模式,或者其它合适的设计模式,来进行代码的建设。

比如,这样:

public static class Factory

{

    public static Ixxxxxx CreateWithOpen()

    {

        var obj = new Obj();

        obj.Status = 1;

        return obj;

    }

    public static Ixxxxxx CreateWithClose()

    {

        var obj = new Obj();

        obj.Status = 2;

        return obj;

    }

}

当然,使用枚举也行,这个说白了,就是看设计者的意愿了。

所以,设计模式没有说必需在哪个场景中使用,更确切的说,应该是,当你使用了设计模式,能不能为你的团队成员带来方便,或者提升代码质量,避免一些错误。如果是,就用,如果仅仅带来了复杂,并没有益处,那还是算了。

一句话,没有该不该用,也没有哪些需要不需要用,用就要带来效益,无论是对团队还是产品质量或产品的可维护性。用不用,要以团队配合和产品为导向,这才是对一个软件设计师的基本要求。


查看完整回答
1 反对 回复 2018-08-06
?
侃侃无极

TA贡献2051条经验 获得超10个赞

我先说下 我目前看到用到了工厂模式的例子:

一般的MVC框架中,都有一个基本的DB数据库基本操作类
我叫它DB class,有一个baseModel class 去继承 db class
baseModel 是所有框架model的基类,需要继承baseModel
baseModel已经有db类的 增删查改的方法了,baseModel其实就是数据库工厂,不同的模型继承baseModel,就有操作不同数据表的对象实例了,这样就用一个基础的class 完成了实例化各个不同数据表的对象,就好像是工厂一样,传不同的表名字就返回给你不同的对象。
我的理解就是这样的,如有误,还请包涵和斧正。


查看完整回答
反对 回复 2018-08-06
  • 2 回答
  • 0 关注
  • 4442 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信