【设计模式】HeadFirst-design-patterns(简单工厂、工厂方法、抽象工厂)——附源码

🌸 HeadFirst(design-patterns)最经典的23种设计模式——工厂模式 🌸

  • 创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  • 结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、蝇量模式(享元模式)。
  • 行为型模式:策略模式、模板方法模式、观察者模式、迭代模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

源码

  • github上大佬用java8重写的源码
    • https://github.com/bethrobson/Head-First-Design-Patterns.git
  • gitee上加上中文注释源码(还在学习中)
    • https://gitee.com/chen934298133/design-patterns.git

🌸 本文结合《HeadFirst-设计模式》和这个例子 🌸

1. 工厂模式(代码较多,记得去拿源码运行理解)

1.1 简单工厂

  • 重点:将创建子类的方法拿出来封装成工厂方法

    • 即把new操作符 替换 成工厂对象的创建方法,不再使用具体的实力化
  • 注意此时只有一个抽象类(产品),其他是简单工厂(能管理并直接创建所有产品)

    • 注意看后面的工厂方法,多了一个抽象类(抽象工厂类——注意和抽象工厂模式不是一个东西)
      在这里插入图片描述
  • 奔驰车例子重点

    • 具体代码见:https://gitee.com/chen934298133/design-patterns/tree/master/factory/a_cars_simplefactory1
      在这里插入图片描述
  • Headfirst例子重点

    • 具体代码见:https://gitee.com/chen934298133/design-patterns/tree/master/factory/a_pizzas_simpleFactory
      在这里插入图片描述
  • 每多一个产品都需要修改工厂类,违法开闭原则(对拓展开发,对修改关闭)
    在这里插入图片描述

1.2 工厂方法

  • 定义:
    • 定义一个创建对象的接口,但有子类决定要实力化的类是哪一个,工厂方法让类把实力化推迟到子类。
  • 重点:
    • 子类来决定创建的对象,创建者不需要知道创建了哪种具体的产品
    • 说人话就是:把创建产品的方法交给抽象工厂抽象方法中,在每个子类中传入参数决定创建什么产品
  • 这个例子,两个地方用到了工厂方法?
  • 注意此时有两个抽象类(产品、工厂),这就是抽象工厂模式吗?并不是,这里只是有一个抽象工厂类,注意区别。
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 具体代码见:https://gitee.com/chen934298133/design-patterns/tree/master/factory/b_pizzafm_factorymothod
  • 每多一个产品都需要修改工厂类,新增产品去继承抽象产品类+新增具体工厂去继承抽象工厂类,复合开闭原则(对拓展开发,对修改关闭)

1.3 抽象工厂

  • 细分对比抽象工厂中的工厂方法
  • 多了产品树产品族的概念,即HeadFirst中的原料工厂
    在这里插入图片描述
  • 抽象工厂中是使用工厂方法来实现具体工厂,创建工厂中的产品
    • 我的个人理解也不知道对不对,可以一起讨论。
      在这里插入图片描述

比较抽象工厂和工厂方法

  • 在子类实例化还是自己实例化的地方我没太理解,但是这两者给我最大的收获是遇到单一产品类的时候从产品本身去设计(华为手机/小米手机等),在多个产品类的时候重点从产品类别去设计。(如商务手机/电竞手机/休闲手机等)
工厂方法模式:抽象工厂模式
由子类自行决定实例化那个类自己决定实例化哪个类
针对的是一个产品等级结构针对的是面向多个产品等级结构
一个抽象产品类多个抽象产品类
可以派生出多个具体产品类每个抽象产品类可以派生出多个具体产品类
一个抽象工厂类,可以派生出一个具体工厂类一个抽象工厂类,可以派生出多个具体工厂类
每个具体工厂类只能创建一个具体产品类的实例每个具体工厂类可以创建多个具体产品类的实例
  • 关于组合:
    • 工厂方法是由子类自行决定实例化那个类,而抽象工厂是自己决定实例化哪个类。至于是组合还是继承还是实现接口都无所谓,用组合更好。根本区别在于是自己实例化还是子类实例化。(但是我没理解这句话的意思,什么样是自己实例化,什么样是子类实例化?我感觉都是子类在实例化)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

抽象工厂和service/serviceImpl对比

  • 初看感觉奇怪特别像,其实和抽象工厂完全没有任何关系
    在这里插入图片描述

  • 具体代码见:https://gitee.com/chen934298133/design-patterns/tree/master/factory/c_pizzaaf_abstartfactory

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Head First设计模式-深入浅出设计模式》是一本以简单有趣的方式介绍设计模式的书籍。设计模式是在软件开发中解决特定问题的一种经验总结,它们提供了在实际开发中可重用、可靠、灵活的解决方案。 该书的主要特点是通过生动有趣的讲解和丰富多样的图表、示例来帮助读者更好地理解和应用设计模式。作者采用了大量的图形和实例来解释设计模式的概念,使读者能够迅速理解并应用这些概念。 这本书涵盖了23种常用的设计模式,如工厂模式、单例模式、适配器模式、装饰器模式等。每一种设计模式都以一个实际的例子开始,引出该模式解决的问题,然后详细解释其结构和应用,最后通过示例代码展示如何使用该模式。 此外,该书还介绍了设计模式之间的关系和如何选择合适的设计模式。它教授了读者如何在具体问题中识别出适用的设计模式,并提供了一些实际的应用建议。 《Head First设计模式-深入浅出设计模式》以其独特的教学风格和简洁明了的讲解深受读者喜爱。这本书不仅适合初学者了解设计模式,也适合有一定经验的开发人员进一步提高他们的软件设计和编程能力。 总之,这本书以其生动有趣的讲解方式和大量的图表、实例为读者介绍了设计模式的基本概念和具体应用,是学习和理解设计模式的一本不可或缺的指南。 ### 回答2: 《Head First设计模式:深入浅出设计模式》是一本主要介绍软件设计模式的书籍。设计模式是在软件开发中经常出现的问题的解决方案,可以帮助开发人员更好地构建可重用、可扩展、可维护的代码。 这本书以深入浅出的方式介绍了23种常见的设计模式,通过生动有趣的讲解和大量的图形和实例,使读者能够更加轻松地理解和掌握设计模式。它采用了非传统的学习方式,通过讲故事、练习、谜题等方式将设计模式的概念和使用方法娓娓道来。 该书首先从简单的设计模式开始,引导读者逐步理解和掌握基础的设计原则和模式,如单例模式、工厂模式等。然后,逐渐深入介绍更复杂的模式,如装饰器模式、观察者模式、策略模式等。每个模式都通过具体的案例和代码示例进行讲解,帮助读者理解模式的思想和应用场景。 除了具体的设计模式之外,这本书还关注了如何将设计模式应用到现实的软件开发中。它探讨了如何根据不同的需求选择合适的设计模式,以及如何通过设计模式提高代码的质量和可维护性。 总的来说,《Head First设计模式:深入浅出设计模式》是一本非常有趣、易懂且实用的设计模式入门书籍。无论是初学者还是有一定经验的开发人员,都能从中获得有益的知识和经验,提高软件开发的能力和效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值