前言
今天给大家带来满满干货,不仅有工厂三兄弟,还有面向对象和面向过程的思想,以及接口和抽象类区别,希望大家认真阅读,满载而归!
简介
工厂设计模式使用常用而且常见的面向对象设计模式,它一共有三种:
- 简单工厂
- 工厂
- 抽象工厂
这是由简单到复杂的顺序来的,其实大家只要理解了,就都很简单!
为了方便大家理解,还是个大家举个例子,工厂就一个箱子或集合,他里边包含很多个类或是方法。带着这个思想,下边的东西就很好理解了!
面向对象
如果你是个面向过程的电脑使用者,你就会把所有文件都放在一个文件夹里边。当你需要放文件的时候,你就只需要放在这个文件夹里就可以了!这就体现出面向过程的优点,那就是思路比较简单,功能实现比较快。
但是如果有一天,你需要找一个文件的时候,你需要在茫茫多的文件里,找到你需要的文件!这需要耗费大量时间和经历,因为如果是编程的话,你出现bug的时候,可不是简单浏览一下就能出答案的!
那么面向对象思想的话,你需要把文件分类,比如按文件比较 具体 的格式分为word、excel等格式,根据类别放在不同的文件夹下边,这样,你再需要操作的时候,根据文件的类别,就可以很快的找到它!
简单工厂
上边我比较形象的给大家说了一下面向过程和面向对象!简单工厂设计模式则是面向对象比较具体的体现!
简单工厂属于创建型设计模式,又叫 静态 工厂设计模式,大家在我之前总结的表格里并不能看到它,它是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。
这是简单工厂的实例代码
运算类:基类,设置三个基本属性,负责用于传入传出数据
计算子类:衍生类,可以看作是实际计算类,主要继承运算类的属性
运算工厂:用于判断运算类中的数据进行的计算方式
从上图我们可以看出简单工厂的特点的:
- 只有一个工厂(具体的)
- 只能生产一种产品(抽象产品)
- 这种产品可以有多个具体的类型
简答工厂模式最大的优点就是:工厂类包含了逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户来说,去除了与具体产品的依赖。
工厂模式
定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
什么意思呢?就是之前简单工厂中加减乘除都在一个运算类里边,但是到了工厂的话,就去掉了简单,这个时候我们需要每个计算方式都通过一个工厂的方式来包装起来,然后吧这些工厂抽象出一个</font color>抽象工厂!
工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。
优点:可以在不改变原有具体工厂的前提,增加或是修改其他计算方式!
缺点:就像之前说的那样,你会额外”创建“那些工厂的开发量!(灵活是有代价的,现在多写点,出问题的时候也就好解决了!)
抽象工厂
抽象工厂就是为了创建一系列相关或是相互依赖的接口,而无须指定它们的具体的类!
它主要就为了创建不同类的东西,但是不用(抽象)类来总结!就好比,小米公司,大家都知道它是制造手机的大公司,但是它还生产电脑,耳机,自行车等!所以在小米的工厂里,会产出不同类型的东西,所以我们叫它小米公司(抽象名称),而不是小米手机公司(具体),在小米公司里边有不同的车间!
为了和上边的UML图保持一致,小编也就继续用的这个例子,此图可能不是很形象,但是能够帮助理解
区别
它们三兄弟最主要的区别,在名字中就能体现出来!
(ps:在不管是学习还是写博客的时候,我都会用到顾名思义这个词,它既然叫这个名字,肯定由它的原因,前人通过它的特点总结归纳,然后给它起的名字,我们就应该好好利用,通过明显名字看现象,在透过现象看本质,那么我们的学习也就会如虎添翼!)
模式 | 特点 |
---|---|
简单工厂 | 只有一个工厂类一个生产方法,根据参数不同生产不同的产品。 |
工厂 | 每一个工厂类只负责一个产品生产,不生成其它产品。好比一条生产线只生产一个产品线。 |
抽象工厂 | 每一个工厂类提供多个方法,可以生产不同的产品。好比多条生产线可以生产多家产品。 |
接口和抽象类的区别
如果抽象工厂不是很能理解的话,可能是你不太清楚接口和抽象类的区别。这里,我给大家说一下我的理解!
例子:之前我么你说到了,文件可以按照word、excel这些比较具体的标准分类,这样定义的类也是比较具体的类,但是我们也可以按照它的内容分类,比如按照学习、生活、工作分类,这时候,我们需要看一些这些文件的内容再进行分类,这样得到的就是抽象类</font color>。抽象类里边自然定义的就是一些抽象方法</font color>。
接口 | 抽象类 |
---|---|
行为的抽象 | 对象的抽象 |
跨不同类的行为 例子:小鸟的飞翔,飞机的飞翔 | 同类的行为(抽象类) 例子:小鸟的飞翔,大雁的飞翔(它们都是鸟类) |
先定义,并不知道子类的存在 解释:接口就是实现定义好,等待子类去实现 | 通过发现子类共同点,抽象出的类,然后子类继承重写 解释:通过对子类的观察,抽象出来的不具体的类 |
后语
我们在学习时候,不仅仅限于一本书,或是一个视频,我们应该博采广益,站在多个巨人的肩膀上,我们才会看到不一样的风景!