Skip to content

Instantly share code, notes, and snippets.

View Sihui's full-sized avatar

Sihui Huang Sihui

View GitHub Profile
class PizzaStore
attr_accessor :pizza_prototype_collection
def initialize
@pizza_prototype_collection = {}
end
def take_order(pizza_type)
pizza_prototype = pizza_prototype_collection[pizza_type]
raise 'unsupported pizza type' unless pizza_prototype
class PizzaStore
def take_order(pizza_type)
case pizza_type
when 'matcha'
pizza = Pizza.new('Matcha Pizza', ['matcha powder'])
when 'pepperoni'
pizza = Pizza.new('Pepperoni Pizza', ['pepperoni', 'shredded mozzarella cheese'])
when 'chicken'
pizza = Pizza.new('Chicken Pizza', ['chicken', 'mushroom', 'spinach'])
else
@Sihui
Sihui / pizza_store.rb
Last active January 7, 2018 21:19
Design Pattern: Prototype and Pizza
class PizzaStore
def take_order(pizza_type)
case pizza_type
when 'pepperoni'
pizza = Pizza.new('Pepperoni Pizza', ['pepperoni', 'shredded mozzarella cheese'])
when 'chicken'
pizza = Pizza.new('Chicken Pizza', ['chicken', 'mushroom', 'spinach'])
else
pizza = Pizza.new('Cheese Pizza', ['cheese'])
end
@Sihui
Sihui / pizza.rb
Last active January 7, 2018 21:36
Design Pattern: Prototype and Pizza
class Pizza
attr_reader :name, :toppings, :state
def initialize(name, toppings)
@name = name
@toppings = toppings
@state = 'raw'
end
def bake
@Sihui
Sihui / car_construction_director.rb
Created January 6, 2018 19:23
Design Pattern: Builder and Car
class CarConstructionDirector
def construct_car(builder:)
builder.build_car_frame
builder.add_engine
builder.add_front_wheels
builder.add_back_wheels
builder.add_dashboard
builder.add_energy_source
builder.car
end
@Sihui
Sihui / electronic_car_builder_v2.rb
Last active January 6, 2018 19:19
Design Pattern: Builder and Car
class ElectronicCarBuilder
attr_reader :car
def initialize
@car = ''
end
def build_car_frame
car << "This is an electronic car\n"
end
@Sihui
Sihui / sports_car_builder_v2.rb
Last active January 11, 2018 04:47
Design Pattern: Builder and Car
class SportsCarBuilder
attr_reader :car
def initialize
@car = ''
end
def build_car_frame
car << "This is a sport car\n"
end
@Sihui
Sihui / standard_car_builder_v2.rb
Last active January 6, 2018 19:18
Design Pattern: Builder and Car
class StandardCarBuilder
attr_reader :car
def initialize
@car = ''
end
def build_car_frame
car << "This is a standard car\n"
end
@Sihui
Sihui / electronic_car_builder.rb
Last active January 6, 2018 19:19
Design Pattern: Builder and Car
class ElectronicCarBuilder
def build
car = ''
# 1. build car frame
car << "This is an electronic car\n"
# 2. add an engine
car << " with a electronic engine\n"
# 3. add front wheels
car << " with two front wheels\n"
# 4. add back wheels
@Sihui
Sihui / sports_car_builder.rb
Last active January 11, 2018 04:41
Design Pattern: Builder and Car
class SportsCarBuilder
def build
car = ''
# 1. build car frame
car << "This is a sport car\n"
# 2. add an engine
car << " with a powerful engine\n"
# 3. add front wheels
car << " with two front wheels suitable for mountain paths\n"
# 4. add back wheels