工厂的争议

工厂的争议

说起设计模式,你第一个所想到的几个设计模式里,一定有工厂模式。因为它既简单方便,见效快。但像所有设计模式一样,它也有着争议。

============================

工厂的滥用

第一次明确的学习接触工厂模式,是在大学里学习JavaEE开发。老师的示例代码里,分别给Business,Dao设置了工厂,用来创建Business,Dao。

就像这样:

class BusinessFactory{

    public static IUserBusiness getUserBusiness(){
        return new UserBusinrss();
    }

    public static IStudentBusiness getStudentBusiness(){
        return new StudentBusiness();
    }

}

class DaoFactory{
    public static IUserDao getStudentDao(){
        return new UserDao();
    }

    public static IStudentDao getStudentDao(){
        return new StudentDao();
    }
}

老师说:这样的好处就是,将来你有更改实现类的时候,就不需要跑到每个地方去改new的地方了。

当时觉得好有道理啊!设计出这个模式的人怎么这么聪明啊!!!

恩……年轻真好。

来让我们吐槽这个事情吧。

首先,必须要承认工厂减少new关键字,避免多处修改的好处,这是开闭原则的非常好的一个体现。多处且大量new一个对象时,可以使用工厂模式

然后我们就从实际吐槽:

  • 就我们那小项目,一个getUserBusiness的调用次数绝对没超过3次。(大部分时候只有一次)

    在通常只作为一对一调用的对象上画蛇添足的增加工厂方法,是非常愚蠢和增加工作量的行为。

  • 可见的未来完全没有扩展的需求和欲望and必要。

    完美的开闭原则体现在于,功能的扩展与修改,不去改变原有类,而是继承现有类进行重写,并修改实现。但是这条原则的使用率并不高。做第三方外部依赖库时有这样做的需求,但大部分我们这些开发业务需求的开发者来说,这样不但没有好处,反而造成代码冗余与垃圾沉淀。扩展一个类远没有直接去修改的方便。

    (想象一下,你能接受你的项目里有大量不被使用的年久垃圾代码?)

  • 要是哪天我的构造方法突然增了一个参数咋办?我不是要去调用出修改吗?

    醒醒吧,你要加参数。你的参数谁给你传?不还是要通过工厂方法的接口吗?还不是要去每个地方修改?如果不是,那就是不需要传递的参数,那不能直接去类里面增加?(当然我们不排除真有这样的特殊情况)

那么,现在你明白了为什么不要滥用工厂了吗?没有正确的方案,只有合适的方案。好用的东西不要滥用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值