什么是工厂模式 恢复出厂设置是什么意思

什么是工厂模式(恢复出厂设置是什么意思)
前言
设计模式对于一些初级开发者来说 , 可能并未着重关注 。不过随着开发的深入 , 读者会慢慢体会到设计模式的重要性 。深入掌握并加以运用会使你的代码得到质的提升 , 同时也是读者开发水平的一个体现 。
于是 , 基于个人的理解以及对一些资料的总结便写了这篇文章 , 以最通俗易懂的方式为读者讲解每一种模式 。力求读者一看就懂 , 且看完会有所收获 。当然 , 前提是坚持看完 。因为如果你只是看一眼就滑走那么这篇文章将毫无意义 。
本文能为读者创造的价值:
1. 理解什么是工厂模式
2. 提取源码中的工厂模式应用 , 提升源码阅读能力
3. 为读者工作中的业务代码设计提供编程设计思路 , 提升读者的代码质量
4. 提升个人职业价值(说白了就是面试官问了工厂模式你看了这篇文章理解得更多 , 而你的竞争者却一无所知 , 那么你的优势就很明显了)
掌握设计模式的三个过程:
1、理解:通过本文理解设计模式
2、识别:阅读代码的时候能够识别出应用了哪种设计模式
3、应用:当接到业务的时候 , 能够反应出可以应用哪种设计模式并加以实现(读者想要达到这个程度 , 需要反复重复“识别”的过程)
一、简单工厂模式
想象这样一个业务场景:一个生产食物的工厂类(FoodFactory) , 该工厂需要根据消费者的不同需求去生产不同的食物(面条noodle、鸡肉chicken) , 那么简单工厂模式就产生了 , 看代码(对照这段描述):
注:noodle和chicken都继承自食物类food(派生关系)
这样简单工厂模式就实现了 , 总结一下:一个工厂类(XxxFactory) , 提供一个生产的方法(makeXxxx),根据消费者的不同需求(入参name)创建不同类型的食物对象(noodle/chicken) 。
二、工厂模式
对于单个工厂来说 , 简单工厂模式足够支撑 。不过涉及到多个工厂的话 , 就需要工厂模式了 。
基于之前的业务场景 , 试想一下 , 客户需要对食物做分类了:中餐、西餐 。那么这个时候就产生了两个工厂的需求(ChineseFoodFactory和WesternFoodFactory),上代码:
注:这里以noodle和chicken结尾的类都继承自食物类food(派生关系)
是的 , 你是否觉得有点眼熟(如果你已经理解了简单工厂模式 , 你应该发现了这是两个简单工厂模式 。如果你没发现的话 , 请回到简单工厂模式重新理解一次) 。好的 , 修改一下代码 , 工厂模式实现:
注:更改的部分已经标了出来 , 实际上是做了一个接口 , 把工厂的实例化作了抽象 , 这是工厂模式的关键思想
调用代码:

看到这里 , 其实读者应该已经大概理解 , 工厂模式是在简单工厂的基础上 , 将具体工厂的实例化作抽象选择 。
我在文章开头提到过 , 读者想要有所收获的前提是:坚持看完 , 如果你已经看到了这里 , 说明你理解了这个前提 , go on!
三、抽象工厂模式
引用一个经典例子:制造一台电脑
CPU、主板、内存……一种配件就需要一个工厂 , 如果读者已经理解了前面讲的工厂模式 , 那么你现在脑海里应该已经有了一个大概的思路 , 再体会一下这个过程 , 其实这就是设计模式为你带来的提升 。如果没有的话 , 请回到前面再看一遍 。让我来猜一下你的思路(拿cpu来举例):

将各个配件工厂组装成电脑:

写到这里 , 工厂模式的问题就产生了:试想一下 , 如果内存和主板型号不兼容 , 那么将导致电脑不可用 , bug就产生了 。
想解决兼容问题 , 就需要舍弃客户自由选择工厂对象的权力 , 并指定各个工厂生产的对象做一个固定的组合(产品族 , 产品族的说明图我放在了最下面) , 这就是抽象工厂模式的设计思路 , 看代码:

【什么是工厂模式 恢复出厂设置是什么意思】

    推荐阅读