【设计模式】工厂三兄弟

前言

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

简介

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

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

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

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


面向对象

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

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

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


简单工厂

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

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

这是简单工厂的实例代码

这里写图片描述

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

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

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

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


工厂模式

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

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

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

这里写图片描述

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


抽象工厂

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

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

抽象工厂UML图

这里写图片描述

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



区别

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

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


接口和抽象类的区别

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

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

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


后语

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



希望本文对您有所帮助! 有什么不足!欢迎指正! 感觉不错可以赞一下哦!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
工厂方法模式是一种常见的创建型设计模式,它定义了一个用于创建对象的接口,但是由子类决定要实例化的类是哪一个。在工厂方法模式中,创建对象的过程被分离出来,使得这个过程可以被子类定制化,从而提高了代码的可扩展性和可维护性。 工厂方法模式的核心思想是将对象的创建和使用分离开来,客户端只需要知道所需对象的类型,而无需关心对象的创建过程。具体来说,工厂方法模式包含以下几个角色: 1. 抽象工厂(Abstract Factory):定义了工厂方法的接口,用于创建产品对象。 2. 具体工厂(Concrete Factory):实现抽象工厂接口,根据具体需求创建具体产品对象。 3. 抽象产品(Abstract Product):定义了产品的接口,用于描述产品的属性和行为。 4. 具体产品(Concrete Product):实现抽象产品接口,提供具体的实现。 使用工厂方法模式可以将客户端代码和具体产品的实现代码分离开来,使得代码更加灵活和可扩展。工厂方法模式在实际应用中也有很多场景,例如: 1. 当一个类不知道它所必须创建的对象的类的时候。 2. 当一个类希望由它的子类来指定所创建的对象的时候。 3. 当类将创建对象的职责委托给多个帮助子类中的某个特定子类,并且希望能够在运行时切换这些子类中的哪一个时。 总之,工厂方法模式是一种非常实用的设计模式,可以提高代码的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值