`
zqjshiyingxiong
  • 浏览: 439683 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

RUBY设计模式之生成器模式Builder(简化对象的创建)

    博客分类:
  • RUBY
阅读更多

 

Builder class 负责将所有的部件瓶装于一个复杂的对象中。

 

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

14.2 生成器模式 UML 类图:

 

 

14.3应用场景:

1 、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

2 、当构造过程必须允许被构造的对象有不同的表示时。

 

14.4生成器模式分析与实现(ruby 描述):

 

class Computer
  attr_accessor :display
  attr_accessor :motherboard
  attr_accessor :drives
  
  def initialize(display=:crt, motherboard=Motherboard.new, drives=[])
    @motherboard = motherboard
    @display = display
    @drives = drives
  end
end

class CPU
end

class TurboCPU < CPU
  
end

class BasicCPU < CPU

end

class Motherboard
  attr_accessor :cpu
  attr_accessor :memory_size
  
  def initialize(cpu=BasicCPU.new,memory_size=1000)
    @cpu = cpu
    @memory_size =memory_size
  end
end

class Drive
  attr_reader :type
  attr_reader :size
  attr_reader :writable
  
  def initialize(type, size, writable)
    @type = type
    @size = size
    @writable = writable
  end
end

#
# 这是我们来创建一台非常好的计算机
#
motherboard = Motherboard.new(TurboCPU.new,4000)

drives = []
drives << Drive.new(:hard_drive, 200000,true)
drives << Drive.new(:hard_drive, 200000,true)
drives << Drive.new(:hard_drive, 200000,true)
drives << Drive.new(:cd, 200,true)

computer = Computer.new(:lcd,motherboard,drives)

#
# 这时,我们可能还没有发现问题,因为我们才刚刚创建了一台电脑,比如我们现在要开网吧,我们需要一百台点配置不同的电脑,我想大家就要挠头了
# 现在看看我们用生成器会带来什么好处吧
#

class ComputerBuilder
  attr_reader :computer
  def initialize
    @computer = Computer.new
  end
  
  def turbo(has_turbo_cpu=true)
    @computer.motherboard.cpu = TurboCPU.new
  end
  
  def display=(display)
    @computer.display=display
  end
  
  def memory_size=(size_in_mb)
    @computer.motherboard.memory_size = size_in_mb
  end
  
  def add_cd(writer=false)
    @computer.drives << Drive.new(:cd,760,writer)
  end
  
  def add_dvd(writer=false)
    @computer.drives << Drive.new(:dvd, 4000, writer)
  end
  
  def add_hard_disk(size_in_mb)
    @computer.drives << Drive.new(:hard_work,size_in_mb,true)
  end
end

builder = ComputerBuilder.new
builder.turbo
builder.add_cd(true)
builder.add_dvd
builder.add_hard_disk(1000000000)

computer = builder.computer

#
# 通过电脑生成器,我们可以生成我们想要的电脑的了,就想我们去组装店一样,告诉他们我们想要的配置,他们安装我的要求,不一会就帮我组装了
# 我想要的电脑,真实太棒了,在RUBY中有种魔法方法来写错的生成器,我们来看看吧
#

def method_missing(name, *args)
  words = name.to_s.split("_")
  return super(name, *args) unless words.shift == 'add'
  words.each do |word|
    next if word == 'and'
    add_cd if word == 'cd'
    add_dvd if word== 'dvd'
    add_hard_disk if word == 'harddisk'
    turbo if word == 'turbo'
  end
end

builder.add_dvd_cd_harddisk

# or

builder.add_turbo_and_dvd_harddisk

#
# 魔法方法最杰出的应用是ActiveRecord中的查询方法
# Employee.find_by_ssn('123-34-333')
# 
# Employee.find_by_firstname_and_lastname('John', 'Smith')
 

分享到:
评论

相关推荐

    中文版 Ruby 设计模式.pdf

    《Ruby设计模式》以通俗易懂的方式介绍了Ruby设计模式,主要包括Ruby概述、使用模板方法变换算法、使用策略替换算法、通过观察器保持协调、通过迭代器遍历集合、使用命令模式完成任务、使用适配器填补空隙、使用装饰...

    Ruby设计模式(中文版+英文版).pdf

    本书以通俗易懂的方式介绍了Ruby设计模式,主要包括Ruby概述、使用模板方法变换算法、使用策略替换算法、通过观察器保持协调、通过迭代器遍历集合、使用命令模式完成任务、使用适配器填补空隙、使用装饰器改善对象、...

    Ruby设计模式

    春节巨献,绝对超值!!!!!

    RUBY设计模式.pdf 中文版

    ruby设计模式是2009年出版的,目前已经断货。网上多是影印版,跟正版售价差不多,买一本影印的,的确划不来。也很少有电子中文版的,发个资源,提供点方便给大家。

    ruby设计模式的代码有好多

    创建型模式如单例模式(Singleton)、工厂方法(Factory Method)和建造者模式(Builder)等,主要关注对象的创建过程,提供了一种在不指定具体类的情况下创建对象的方法。例如,Ruby中的Singleton模块可以轻松实现...

    实例讲解Ruby使用设计模式中的装饰器模式的方法

    Ruby中的装饰器模式是一种设计模式,它允许我们动态地向对象添加新的行为或职责,而无需修改原有类的代码。这种模式比继承更加灵活,因为它可以在运行时改变对象的行为,而不是在编译时通过类继承来实现。装饰器模式...

    Ruby设计模式编程之适配器模式实战攻略

    适配器模式是软件设计模式中的一种,它的主要目的是解决不同接口之间的兼容性问题,使得原本不兼容的类或接口能够协同工作。在Ruby这样的动态类型语言中,虽然类型检查不是强制性的,但适配器模式仍然有其重要的应用...

    Ruby-Autogeneratecode一款命令行数据模型代码生成器

    开发者可以通过自定义 `config.gen` 文件,根据项目需求调整生成的代码结构,使代码更符合项目规范和设计模式。在 Ruby 开发环境中,这样的工具无疑提升了开发体验,降低了出错的可能性,值得在实际工作中探索和使用...

    Ruby-Ruby中的GoF设计模式实现

    "Ruby中的GoF设计模式实现"是指在Ruby编程语言中应用Gang of Four(GoF)设计模式。GoF设计模式是四本同名书籍中的核心概念,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者提出,书中总结了...

    Ruby使用设计模式中的代理模式与装饰模式的代码实例共3页

    **代理模式**是一种结构型设计模式,它创建了一个拥有与目标对象相同接口的代理对象,代理对象在客户端和目标对象之间起到中介作用,可以控制对目标对象的访问,或者在调用目标对象的同时添加额外的功能。在Ruby中,...

    Ruby设计模式编程中使用Builder建造者模式的实例

    建造者(Builder)模式是设计模式的一种,它将复杂对象的构造过程与对象的表示分离,使得同样的构建过程可以创建不同的表示。这在处理具有多个组成部分的复杂对象时尤其有用,因为可以通过改变建造者来改变对象的...

    Ruby 面向对象设计实践--2013年

    《Ruby面向对象设计实践》介绍了一些常用的设计模式,如工厂模式、单例模式、策略模式等,帮助开发者更好地组织代码结构,提高代码的可读性和可维护性。 #### 四、实战案例分析 书中通过具体的案例来展示如何运用...

    ruby面向对象设计 Practical Object-Oriented Design in Ruby

    本书《Ruby面向对象设计:Practical Object-Oriented Design in Ruby》是一本专注于Ruby编程语言中面向对象设计原则和技术的书籍。作者Sandi Metz在书中讲述了如何应用敏捷方法来设计高质量、易于维护和扩展的面向...

    Ruby-GoOnRails使用Rails生成器来生成一个Golang应用

    `GoOnRails`是专门为Rails开发者设计的一个生成器,它允许在Rails应用中集成Go代码,创建Go API服务。这个工具简化了在Rails项目中使用Go进行后端处理的流程,使开发者可以利用Go的性能优势处理高并发请求,同时保留...

    design-patterns-ruby:Ruby 中的 GOF 设计模式

    处理对象创建机制的设计模式,尝试以适合情况的方式创建对象。 - 用于创建和使用相关/依赖对象系列 - 用于逐步创建不同类型的复杂对象 - 用于从许多对象中创建一种可以代替它使用的对象 - 接下来。 - 即将推出...

    用ruby读excel文件生成xml文件

    标题 "用ruby读excel文件生成xml文件" 描述的是一项技术任务,即使用Ruby编程语言来处理Excel文件,并将其内容转换成XML格式。这在数据迁移、格式转换或与不支持Excel格式的应用程序进行数据交换时非常有用。Ruby库...

    ruby-design-patterns:Russ Olsen 的 Ruby 设计模式

    Ruby,作为一门动态、灵活的面向对象语言,其设计模式不仅包含经典的面向对象模式,还可能涵盖一些针对其特性的独特模式。 1. **单例模式**:在Ruby中,单例类(Singleton)用于确保一个类只能有一个实例。通常,...

    Ruby中使用设计模式中的简单工厂模式和工厂方法模式

    之前有看过《ruby设计模式》,不过渐渐的都忘记了。现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下。 简单工厂模式: # -*- encoding: utf-8 -*- #运算类 class Operation attr_...

Global site tag (gtag.js) - Google Analytics