`

设计模式与动态语言之命令模式 Composite

阅读更多
组合模式是一种对象结构型的使用率比较高的设计模式,它的别名有部分-整体模式,合成模式.

意图:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。


动机:
  • 这些类的代码必须区别对待图元对象与容器对象,而用户认为它们是一样的。对这些类的区别使用,使用程序变得复杂。
  • 组合模式描述了如何使用递归组合,使用户不必对这些类进行区别。



适用性:
  • 想表示对象的 部分-整体层次结构
  • 希望用户忽略组合对象与单个对象的不同, 用户将统一地使用组合结构中的所有对象

结构:



效果:
  • 定义了包含简单对象和组合对象的类层次结构。简单对象可以被组合到复杂对象中,而组合的对象可以再被组合。这样客户端代码中用到简单对象的地方都可以使用组合对象
  • 简化客户端代码。客户端不用知道某对象是简单对象还是组合对象,可以以一致的方式使用这些对象
  • 更容易增加新类型的组件。新的组件可以方便地加入已有组合对象中不用改变客户端代码


误用:
只有Leaf 没有组合对象时.


附件说明: 在动态语言弱类型中,省去了用泛型来实现组合结构.

下面是个小例子,关于魔兽中物品或装备合成:

class Equip
  attr_accessor :components, :name, :attack, :defense, :level

  def initialize(options={})
    @components = []
    @level = 0
    @attack = 100
    @defense = 10
    @name = options[:name]
  end

  def upgrade
    @attack *= 1.1
    @defense *= 1.06
    @level += 1
    puts '升级成功'
  end

  def full_name
    "#{@name} LV#{@level}"
  end

  def add(c)
    @components << c
  end

  def remove(c)
    @components.delete_if{|i| i.name == c.name}
  end
end

class Material
  attr_accessor :name

  def initialize(options={})
    @name = options[:name]
  end
end

e1 = Equip.new(:name => '小刀')
e1.add(Material.new(:name => '材料1'))

e2 = Equip.new(:name => '大刀')
e2.add(e1)
e2.add(Material.new(:name => '宝石'))

e2.upgrade
puts e2.full_name



类图:



  • 大小: 48.6 KB
  • 大小: 14.6 KB
分享到:
评论

相关推荐

    24种设计模式以及混合设计模式

    通过学习和应用这些设计模式,开发者不仅可以提高代码的可读性、可维护性和可扩展性,还能提升团队间的沟通效率,因为设计模式是软件工程中的通用语言。对于任何有志于提升软件开发水平的人来说,理解和掌握设计模式...

    JavaScript设计模式.pdf

    JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体模式(Singleton Pattern)...

    java设计模式;java语言描述;经典的设计模式

    Java的面向对象特性,如封装、继承和多态,与设计模式的理念相辅相成,使得Java成为学习设计模式的绝佳平台。 在Java设计模式中,有三大类模式:创建型模式、结构型模式和行为型模式。每种模式都针对软件设计的不同...

    设计模式:Java语言中的应用.zip

    在Java语言中,设计模式的应用广泛且至关重要,因为它们能帮助开发者遵循良好的编程原则,如开闭原则、单一职责原则、依赖倒置原则等。 首先,我们来看一些基本的设计模式类型: 1. 创建型模式:这类模式主要处理...

    GOLF设计模式(C++语言版)

    目 录 序言 前言 读者指南 第1章 引言 1 ...6.8 Alexander 的模式语言 235 6.9 软件中的模式 236 6.10 邀请参与 237 6.11 临别感想 237 附录A 词汇表 238 附录B 图示符号指南 241 附录C 基本类 244

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

    软件设计模式与体系结构孙云山课后习题234章答案.zip

    孙云山老师的“软件设计模式与体系结构”课程深入探讨了这些模式及其在构建复杂系统中的应用。本资料集合包含了课后习题的第234章答案,这将有助于学生深化对设计模式的理解,并提升其实际应用能力。 设计模式是...

    c#设计模式

    C#设计模式是针对C#编程语言的特定设计模式应用,它们是经验丰富的开发者们在面对软件设计时总结出的一系列可重用解决方案。这里我们将深入探讨23个经典设计模式,并了解它们在C#中的应用。 1. 创建型模式:这类...

    设计模式23种类图

    在Java编程语言中,设计模式的应用尤为广泛,因为它们能够提升代码的灵活性和质量。 标题"设计模式23种类图"指的是在软件设计领域中的23个经典设计模式,这些模式被分为三大类:创建型、结构型和行为型。这23种模式...

    二十三种设计模式【PDF版】

    设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于 和单位做买卖。文章中还对 Jive再进行了剖析。 设计模式之 Decorator(装饰...

    《设计模式》中文版

    设计模式并非具体的代码或库,而是一种通用解决方案的描述,可以在多种编程语言中复用。《设计模式》中文版是一本针对Java程序员的指南,详细讲解了全部23种设计模式,这些模式被归类为创建型、结构型和行为型三大...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    这本书详细阐述了23种设计模式,这些模式被广泛应用于各种编程语言,包括C++。 1. **创建型模式**:这类模式主要关注对象的创建过程,它们提供了一种在不指定具体类的情况下创建对象的方法,使得系统更加灵活和可...

    设计模式PPT---25种设计模式详解

    这份名为“设计模式PPT——25种设计模式详解”的资料,显然是一个深入探讨设计模式的教程,它通过PDF格式对25种主要的设计模式进行了详尽的阐述。 首先,我们要理解设计模式的基本概念。设计模式不是代码,而是一种...

    C#语言讲解的设计模式好书

    《C#语言讲解的设计模式好书》是一套深入探讨C#设计模式的资源集合,包含多本电子书和代码示例。这套资料旨在帮助开发者理解并掌握如何在C#编程中应用设计模式,以提高软件的可维护性、扩展性和复用性。以下是这些...

    设计模式Golang实现《研磨设计模式》读书笔记.zip

    设计模式Golang实现《研磨设计模式》读书笔记Go语言设计模式Go语言设计模式的实例代码创建模式工厂简单模式(Simple Factory)工厂方法模式(工厂方法)抽象工厂模式(Abstract Factory)创建者模式(Builder)原型...

    程序设计模式(c#语言)

    本资料主要聚焦于在C#语言环境下如何运用设计模式来提升编程技能。下面我们将深入探讨其中的关键知识点。 一、设计模式的基本概念 设计模式并不直接提供代码,而是描述在特定情况下,如何设计类和对象之间的关系,...

    23种java设计模式.pdf

    " JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...

    设计模式-王翔 全本

    《设计模式-王翔 全本》是一本深入探讨软件设计模式的重要著作,作者王翔在书中详尽地阐述了设计模式的理论基础与实践应用。设计模式是软件工程中的重要概念,它代表了在特定情境下,经过时间检验、可复用的解决方案...

    JAVA设计模式-chm版

    4. 促进团队协作:设计模式是开发人员之间的通用语言,使得团队成员能更好地沟通和协同工作。 三、学习设计模式的方法: 1. 阅读经典书籍,如《设计模式:可复用面向对象软件的基础》(GOF设计模式)。 2. 实践编程...

Global site tag (gtag.js) - Google Analytics