文章转至:cainrun.github.io/14718583940…html
刚忙完就给我来一场大病, 多么痛的领悟, 好不容易好点了, 能够整理整理知识点了~git
最后: 若是你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考大家的意见再进行修改, 联系我时, 请备注
工厂模式
, 若是以为好的话, 但愿你们也能够打赏一下~嘻嘻~祝你们学习愉快~谢谢~github
所谓
工厂模式
其实显示中的工厂没啥区别, 客户下单, 工厂负责作出产品出来交货, 这样子就没了, 至于工厂里面作了什么东西, 怎么实现, 咱们彻底不用关注, 只要知道工厂能按时交货就能够了.学习
在工厂模式当中, 又有两种不一样的工厂模式, 分别是
简单工厂
与抽象工厂
, 他们以前的区别也很简单, 无非就是一个是实例
一个抽象
, 这么说好像不太明确, 下面咱们来建个工程, 看看简单工厂
和抽象工厂
二者之间到底有啥不同~ui
首先咱们把以前的那个
WorkSpace
打开, 新建一个FactoryPattern
工程, 而后咱们再来新建一个工厂类, 此次咱们就拿一个汽车工厂做为例子~3d
接下来咱们建立一个汽车的基类
BaseCar
, 还有一个协议, 这个协议是用来限制BaseCar
或者BaseCar
的子类实现一些必须实现的方法, 我这里只是作演示, 因此BaseCar
类里面空实现就行了, 其余的交给子类去实现.code
汽车的基类咱们已经有了, 如今咱们来创建一个汽车工厂类, 就拿全球最大的汽车厂商通用来作例子, 在这里咱们会拿通用汽车的几个旗下品牌来作例子, 且都继承与
BaseCar
, 而后给他们对应作一些差别化的操做就OK了~~htm
如今咱们来实现
Protocol
里的方法再加一些差别化, 酱紫咱们就知道到时候初始化出来的汽车是哪辆了~~ 咱们先拿Buick
来作例子, 添加一个差别化方法, 而后再看看咱们利用工厂模式初始化出来的对象是否是Buick
.对象
其余的几个品牌车子也是同理进行就能够了, 这里就不作演示了, 代码当中我会填上去, 到时候你们去下载源码下来看看就哦了~~blog
简单工厂
到这里就基本上搞定了, 下面就让咱们来看看什么是抽象工厂
.
其实所谓的
抽象工厂
与简单工厂
最大的却别, 就是把工厂类作成一个抽象的对象, 比简单工厂
多了一层抽象层, 而后使用一个管理者去管理这些对应的厂商, 用户能够根据本身的需求, 向不一样的厂商拿货, 这就像是超市似得, 一个类别的商品有好几个或者是十几个不一样的厂商在供货, 可让消费者, 根据本身的消费水平或者需求来选择不一样厂商的产品, 下面让咱们用代码说话~
在开始以前, 咱们确定要先规划好文件夹的目录, 以避免与以前的
简单工厂
类搞混, 下面就是咱们的文件夹结构.
接下来咱们就要去新建咱们的
BaseFactory
以及BaseCar
, 可是这里因为以前已经有BaseCar
这个类了, 为了区别, 咱们在新建的BaseCar
前面加个前缀Ab
, 酱紫就行了
声明且实现
AbBaseFactory
的一个方法.
新建完成以后, 咱们就须要继续, 此次咱们拿
长安
和广汽
两个厂商作例子, 车型的话, 我就随便挑两个, 一个是凯美瑞
, 一个是昂克赛拉
(我是随便取的两辆车啊, 百度一搜就出来这两个货了, 要怪就怪百度去吧).
新建完这些类以后, 咱们须要分别给对应的厂商添加对应的车型,
长安-马自达
,广汽-凯美瑞
在完成了以前的工做以后, 如今咱们来看看
抽象工厂
的核心, 工厂管理者(FactoryManager).
酱紫, 咱们就完成了
抽象工厂
的全部步骤了, 下面让咱们来使用一下抽象工厂
.
完成了全部步骤以后, 咱们就来使用一下
抽象工厂
, 看看究竟是不是咱们所要的东西.
嘿嘿, 到这里, 咱们就完成了
工厂模式
的简单工厂
和抽象工厂
了, 很是的简单, 若是大家须要对应的文档和代码, 请到个人GitHub
里, 地址就在下面
项目地址: github.com/CainRun/Des…