举例说明设计模式之简单工程模式、工程模式和抽象工厂模式

写此文章的用意是记录对设计模式之理解,以供自己巩固修正,若可助读者学习理解,则不胜荣幸。

工厂是量产产品的,我们的设计模式的工厂是量产对象的,不要激动,对象是object。

我们coding的时候,当需要一个对象的时候,我们可以用new的方式创建一个,如果我们要经常创建大量的相同或者相近的对象,或者直接点说,这些对象有相同的基类,在这种场景下,如果仍旧用new的方式,代码就不是模块化的,不便统一管理,看起来也不优雅。所以面对这样的场景,我们最好是创建一个类负责对这些相似对象的创建工作,完成这个工作的类就是工厂类。

我喜欢在不眠之夜的凌晨3点来点喝的,为此我购置了一台饮料机,里面有肥宅水,咖啡,红牛,想喝什么,按对应的按钮,流入杯中的就是什么,很美妙。可是有一段时间,我喜欢喝苏打水,为了让我的饮料机继续为我工作,我必须改一改它的内部结构,并且加上一个苏打水的按钮。如果我的口味频繁变动,我就不得不对这天饮料机改来改去,改来改去、、、

工厂类中有个最简单的,叫做简单工厂,也叫静态工厂,一般它里面只有一个静态的Creat接口,你给它描述你要的对象,它找到创建好后返回给你,但如果一个新的对象也要以这种方式创建,那你就不得不在这个接口中加上这个类的信息和创建,如果经常有新的类要加入其中,那你就不得不对这个简单工厂改来改去,改来改去、、、

我逛商场的时候发现商场里面也有售卖饮料的机器,咖啡机里面出来的是咖啡,奶茶机里面出来的是奶茶,饮水机里面出来的是水。可是此刻我想喝的是果汁,找了一圈没找着,就在我失望之时,我发现工作人员拉来了一个果汁机、哦,原来这样,想喝什么饮料就买个生产什么饮料的机器,就不用对我的那台饮料机改来改去了。可是我只是想喝个饮料,我需要拉来一个机器吗?

由于简单工厂应对新增需求的方式是修改,所以它不在23种设计模式中,而用来应对这种新增产品的场景的,是工厂模式,工厂模式的想法是,抽象的工厂类生产抽象的产品类,在这套机制下,我每增加一个具体的产品类,我就增加一个具体的工厂类来负责生产这个产品,这样就是以新增的方式应对新增,而不会对之前的代码产生影响。显然,每添加一个产品类就需要添加一个对应的工厂,这增加了工作量。但是记得有一个老师讲的,应用设计模式本来就是把简单的事情复杂化(规范化),以抵御变化。

转眼夏去冬来,摆在商场里的饮料机该不会只卖冷饮吧,它该怎样应对这种变化呢,我想他们是不是又拉一批生产各个饮料的热饮饮料机过来呢,可以我现在又比较喜欢喝不冷不热,若即若离的饮料,这样下去商场里该摆满饮料机了。哦,我真是为他们操碎了心肝。过了几天,我等来了他们的解决方案-两台大机器,一个上面贴着“冷”,一个上面贴着“热”,两台机器各有8个出饮料口,出的饮料都是一样的,区别就是一个是冷的,一个是热的。我告诉他们我喜欢喝温暖的,他们立马又拉来一个机器,上面贴着“温”,不错额,不枉我给他们操这心了,但是我发现这8种饮料中竟没有我最爱的可乐,我想让他们在加一种,他们指着机器无奈的说,“磨具上边就这8个口,想再加一个改动很大的、、、”还好我只是一个吃瓜群众消费者,不是他们的产品经理。

如果现有的产品都分成了两个系列,可就是产品类增加了一倍,这对工厂模式产生了新的挑战,跟还是不跟,如果继续使用工厂模式,那工厂类的数量就要跟着增加一倍,行到此时,是不是可以停下来思考一下,到了扩展产品系列的时候了,那么产品种类是不是就比较稳定了呢,如果回答是,那么我们的工厂类的数量就可以转向跟着超产品系列方向扩展了,这种思想的实现就是抽象工厂模式了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值