设计模式:生活中的组合模式

这篇具有很好参考价值的文章主要介绍了设计模式:生活中的组合模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

想象一下,你正在组织一个大型的家庭聚会。在这个聚会中,你需要准备各种菜肴,每个菜肴又包含不同的食材。你的目标是能够以统一的方式处理整个聚会的准备工作,不论是处理单个食材还是一整道菜肴。

在这个场景中,我们可以将“菜肴”看作是组合对象,“食材”看作是叶子节点。整个家庭聚会的准备工作就是一个“部分-整体”的层次结构,与组合模式中的结构类似。

家庭聚会的组合模式类比

  • 整体(Composite):整个聚会的菜单,包含了多个菜肴,每个菜肴又可以包含其他菜肴或者单独的食材。
  • 部分(Leaf):单个食材,如西红柿、黄瓜等,不再包含其他食材。
  • 共同接口(Component):菜肴和食材都可以通过某些共同的操作来处理,例如“准备”或“展示”。

实际例子

假设你需要准备以下菜肴:

  • 沙拉(Composite):包含西红柿(Leaf)、黄瓜(Leaf)和生菜(Leaf)。
  • 烤肉(Composite):包含牛肉(Leaf)和调料(Composite),调料又包含盐(Leaf)和黑胡椒(Leaf)。

这里,沙拉和烤肉都是可以由更小部分组成的复合菜肴,而西红柿、黄瓜、生菜、牛肉、盐和黑胡椒都是基本的食材,没有进一步的分解。

在准备这个聚会时,你不必关心每个菜肴的具体组成。你可能会有一个统一的流程来“准备”每个菜肴,无论它是一个复合菜肴还是一个单一食材。这就是组合模式的精髓:客户端代码可以忽略对象之间的复杂层次差异,统一对待所有对象。

代码实现类比

如果我们要将这个场景转换成代码,可能如下:

// 共同接口
interface PartyItem {
    void prepare();
}

// 叶子节点
class Ingredient implements PartyItem {
    private String name;

    public Ingredient(String name) {
        this.name = name;
    }

    @Override
    public void prepare() {
        System.out.println("Preparing " + name);
    }
}

// 组合对象
class Dish implements PartyItem {
    private String name;
    private List<PartyItem> ingredients = new ArrayList<>();

    public Dish(String name) {
        this.name = name;
    }

    public void add(PartyItem item) {
        ingredients.add(item);
    }

    @Override
    public void prepare() {
        System.out.println("Preparing dish: " + name);
        for (PartyItem item : ingredients) {
            item.prepare();
        }
    }
}

在上述代码中,Dish 可以包含其他 Dish 对象或 Ingredient 对象,而 Ingredient 是基本的食材。prepare 方法为统一的操作,既可以准备单个食材,也可以准备整个菜肴。

总结

通过这个日常生活中的类比,我们可以看到组合模式如何在软件设计中发挥作用。它允许我们以统一的方式操作单个对象和组合对象,简化了客户端代码,并使得整个结构更加灵活。在设计系统时,考虑到部分-整体的关系,可以帮助我们更好地应用组合模式。文章来源地址https://www.toymoban.com/news/detail-847912.html

到了这里,关于设计模式:生活中的组合模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式(1) - UML类图

    从这一节开始,我们将一起学习设计模式。我们的学习目标是什么呢? 了解常用设计模式以及它们的使用场景; 分析实际工程中设计模式的使用,揣摩实际意图,了解作者设计思路; 尝试运用设计模式迭代、重构自己的代码; 提升软件架构设计思路。 最近在阅读 Android 源

    2024年02月09日
    浏览(35)
  • 设计模式7大原则+类图关系

    设计模式:一种对软件设计中普遍存在(反复出现)的各种问题所提出的解决方案。 设计模式的目的:设计模式可以帮助开发人员更好地组织代码结构,提高代码重用性、可读性、可维护性、耦合性、内聚性。 经典面试题: 七大设计原则核心思想 能够以类图的说明设计原则

    2024年02月20日
    浏览(51)
  • Java设计模式之UML类图

    UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、用例图、时序图的使用,就能完成大部分的工作。对于程序员来说,最频繁使用的莫过于类图。因此,这里我只讲解UML类图。 类图是面向对象系统建模中最常

    2024年02月03日
    浏览(43)
  • 【设计模式】二、UML 类图概述

    UML类图:类(对象)本身的组成和类(对象)之间的各种静态关系 依赖、泛化(继承)、实现、关联、聚合与组合 类中用到了对方,那么他们之间就存在依赖关系 类中用到了对方 如果是类的成员属性 如果是方法的返回类型 是方法接收的参数类型 方法中使用到 泛化关系实际上就

    2024年02月09日
    浏览(39)
  • 一文掌握设计模式(定义+UML类图+应用)

    从学编程一开始就被告知,要想做一名优秀的程序员两大必要技能: 1.源码阅读(JDK、C等底层语言封装) 2.设计模式(使用某种语言优雅的落地典型场景功能)。 一般随着工作年限的增长,被迫对底层语言/框架源码阅读的越来愈多,但是设计模式如不刻意去学习,永远不会真正掌

    2024年02月11日
    浏览(61)
  • Java设计模式之行为型-命令模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 4.1、基本实现 4.2、点餐案例  五、总结 1、将一个请求封装为一个对象,使您可以用不同的请求对客户进行参数化。 2、对请求排队或记录请求日志,以及支持可撤销的操作。 3、将命令对象与执行命令的对象分离,

    2024年02月16日
    浏览(37)
  • Java设计模式之责任链模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设计模式之责任链模式 OA系统采购审批需求 传统方案解决OA系

    2024年02月06日
    浏览(41)
  • Java设计模式之创建型-原型模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析  4.1、通用实现(浅克隆) 4.2、深克隆 五、总结 原型模式通过复制已有对象作为原型,通过复制该原型来返回一个新对象,而不是新建对象,说白了就是不断复制相同的对象罢了。 角色 描述 抽象原型类 规定了具

    2024年02月15日
    浏览(50)
  • Java设计模式之行为型-状态模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类,状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不

    2024年02月16日
    浏览(40)
  • Java设计模式之创建型-建造者模式(UML类图+案例分析)

    目录 一、基本概念 二、UML类图 三、角色设计  四、案例分析 五、总结 建造者模式是一种创建型设计模式,它使我们将一个复杂对象的构建步骤分离出来,使得同样的构建过程可以创建不同的表示。该模式的目的是将构建复杂对象的过程抽象化,从而减少代码的重复和复杂

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包