Created
March 18, 2012 00:00
-
-
Save takaheraw/2066792 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class CPU | |
end | |
class TurboCPU < CPU | |
end | |
class BasicCPU < CPU | |
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 | |
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 Computer | |
attr_accessor :display | |
attr_accessor :motherboard | |
attr_reader :drives | |
def initialize(display=:crt, motherboard=Motherboard.new, drives=[]) | |
@motherboard = motherboard | |
@drives = drives | |
@display = display | |
end | |
end | |
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_disk, size_in_mb, true) | |
end | |
end | |
builder = ComputerBuilder.new | |
builder.turbo | |
builder.add_cd(true) | |
builder.add_dvd | |
builder.add_hard_disk(100000) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment