【设计模式】工厂三兄弟

前言

今天给大家带来满满干货,不仅有工厂三兄弟,还有面向对象和面向过程的思想,以及接口和抽象类区别,希望大家认真阅读,满载而归!

简介

工厂设计模式使用常用而且常见的面向对象设计模式,它一共有三种:

  • 简单工厂
  • 工厂
  • 抽象工厂

这是由简单到复杂的顺序来的,其实大家只要理解了,就都很简单!

为了方便大家理解,还是个大家举个例子,工厂就一个箱子或集合,他里边包含很多个类或是方法。带着这个思想,下边的东西就很好理解了!


面向对象

如果你是个面向过程的电脑使用者,你就会把所有文件都放在一个文件夹里边。当你需要放文件的时候,你就只需要放在这个文件夹里就可以了!这就体现出面向过程的优点,那就是思路比较简单,功能实现比较快。

但是如果有一天,你需要找一个文件的时候,你需要在茫茫多的文件里,找到你需要的文件!这需要耗费大量时间和经历,因为如果是编程的话,你出现bug的时候,可不是简单浏览一下就能出答案的!

那么面向对象思想的话,你需要把文件分类,比如按文件比较 具体 的格式分为word、excel等格式,根据类别放在不同的文件夹下边,这样,你再需要操作的时候,根据文件的类别,就可以很快的找到它!


简单工厂

上边我比较形象的给大家说了一下面向过程和面向对象!简单工厂设计模式则是面向对象比较具体的体现!

简单工厂属于创建型设计模式,又叫 静态 工厂设计模式,大家在我之前总结的表格里并不能看到它,它是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。

这是简单工厂的实例代码

这里写图片描述

运算类:基类,设置三个基本属性,负责用于传入传出数据
计算子类:衍生类,可以看作是实际计算类,主要继承运算类的属性
运算工厂:用于判断运算类中的数据进行的计算方式

从上图我们可以看出简单工厂的特点的:

  • 只有一个工厂(具体的)
  • 只能生产一种产品(抽象产品)
  • 这种产品可以有多个具体的类型

简答工厂模式最大的优点就是:工厂类包含了逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户来说,去除了与具体产品的依赖。


工厂模式

定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

什么意思呢?就是之前简单工厂中加减乘除都在一个运算类里边,但是到了工厂的话,就去掉了简单,这个时候我们需要每个计算方式都通过一个工厂的方式来包装起来,然后吧这些工厂抽象出一个</font color>抽象工厂!

工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。

这里写图片描述

优点:可以在不改变原有具体工厂的前提,增加或是修改其他计算方式!
缺点:就像之前说的那样,你会额外”创建“那些工厂的开发量!(灵活是有代价的,现在多写点,出问题的时候也就好解决了!)


抽象工厂

抽象工厂就是为了创建一系列相关或是相互依赖的接口,而无须指定它们的具体的类!

它主要就为了创建不同类的东西,但是不用(抽象)类来总结!就好比,小米公司,大家都知道它是制造手机的大公司,但是它还生产电脑,耳机,自行车等!所以在小米的工厂里,会产出不同类型的东西,所以我们叫它小米公司(抽象名称),而不是小米手机公司(具体),在小米公司里边有不同的车间!

抽象工厂UML图

这里写图片描述

为了和上边的UML图保持一致,小编也就继续用的这个例子,此图可能不是很形象,但是能够帮助理解



区别

它们三兄弟最主要的区别,在名字中就能体现出来!
(ps:在不管是学习还是写博客的时候,我都会用到顾名思义这个词,它既然叫这个名字,肯定由它的原因,前人通过它的特点总结归纳,然后给它起的名字,我们就应该好好利用,通过明显名字看现象,在透过现象看本质,那么我们的学习也就会如虎添翼!)

模式特点
简单工厂只有一个工厂类一个生产方法,根据参数不同生产不同的产品。
工厂每一个工厂类只负责一个产品生产,不生成其它产品。好比一条生产线只生产一个产品线。
抽象工厂每一个工厂类提供多个方法,可以生产不同的产品。好比多条生产线可以生产多家产品。


接口和抽象类的区别

如果抽象工厂不是很能理解的话,可能是你不太清楚接口和抽象类的区别。这里,我给大家说一下我的理解!

例子:之前我么你说到了,文件可以按照word、excel这些比较具体的标准分类,这样定义的类也是比较具体的类,但是我们也可以按照它的内容分类,比如按照学习、生活、工作分类,这时候,我们需要看一些这些文件的内容再进行分类,这样得到的就是抽象类</font color>。抽象类里边自然定义的就是一些抽象方法</font color>。

接口抽象类
行为的抽象对象的抽象
跨不同类的行为
例子:小鸟的飞翔,飞机的飞翔
同类的行为(抽象类)
例子:小鸟的飞翔,大雁的飞翔(它们都是鸟类)
先定义,并不知道子类的存在
解释:接口就是实现定义好,等待子类去实现
通过发现子类共同点,抽象出的类,然后子类继承重写
解释:通过对子类的观察,抽象出来的不具体的类


后语

我们在学习时候,不仅仅限于一本书,或是一个视频,我们应该博采广益,站在多个巨人的肩膀上,我们才会看到不一样的风景!



希望本文对您有所帮助! 有什么不足!欢迎指正! 感觉不错可以赞一下哦!
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值