咱们从一个实际例子聊起:说,一个大富豪想要买车,然后开车
所以富豪买了福特车,就得学一遍福特车怎么开,开车时还得特意拿出说明书,买了奔驰,拿奔驰车的说明书,用户就很烦。于是造车业统一了开车方法,用户开啥车都一样,贼舒坦。
这就是简单工厂模式,也即 面向对象 对 面向过程 的一次优化。优化了消费端,使得消费端不需要知道产品端的构造细节,也即富豪不需要操心拿到的是什么车,反正开就是了。
他们心里清楚,我福特车和你个奔驰车也就零件不一样,装轮子、装发动机、连接这些零件的脏活累活其实没啥区别,他们奔驰哪有什么高明之处啊。于是老板们开始把组装工作外包给了国外去,都让国外同一个贼专业的装车厂来组装,自己就操心材料、车辆各类黑科技的开发就行。
这就是工厂模式了,这次优化是单纯产品端的优化,用户没有任何感知的,将多个产品的统一构造逻辑抽象出去,使得造车老板们造车也轻松多了,分工更加明确与清晰。
于是咨询造车老板,赛车、坦克不也是轮子啥的吗,我能像开车一样式儿得开不?造车老板稍作思索,行,那就再开个产业链。那这新兴的产业链,虽然好像是从0开始,但是他们有经验了,他们知道这次不能再闭门造“坦” 于是造坦前就制定了行业标准,制定完后,国外也根据这标准出来了专业的坦克组装厂,一切都顺利的开展下去了。。。。
这“使用老经验”,其实就是抽象工厂的思想了,优化了新增产品族的情况下的代码复用率。试想下若造车老板们没有复用老经验,又是一通闭门造坦,效率会有多低。
因此做个总结
| ---- | 简单工厂 | 工厂模式 | 抽象工厂 |
| 优点 | 解耦了产品端与用户端 | 优化了产品端 | 扩展产品端更多的产品族 |
| 缺点 | 产品端逻辑压力很大 | 不宜添加新的产品族 | 每次添加产品族都需要写 |
原文:https://www.cnblogs.com/july401/p/14151759.html