Created
September 19, 2014 17:30
-
-
Save wulab/005169f192b7181f2b89 to your computer and use it in GitHub Desktop.
Starbuzz Coffee Ordering Systems
This file contains 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 Beverage | |
attr_reader :description | |
def initialize() | |
@description = "Unknown beverage" | |
end | |
def cost() | |
raise NotImplementedError | |
end | |
end | |
class Espresso < Beverage | |
def initialize() | |
@description = "Espresso" | |
end | |
def cost() | |
1.99 | |
end | |
end | |
class HouseBlend < Beverage | |
def initialize() | |
@description = "House blend coffee" | |
end | |
def cost() | |
0.89 | |
end | |
end | |
class DarkRoast < Beverage | |
def initialize() | |
@description = "Dark roast coffee" | |
end | |
def cost() | |
0.99 | |
end | |
end | |
### | |
class CondimentDecorator < Beverage | |
def description | |
raise NotImplementedError | |
end | |
end | |
class Mocha < CondimentDecorator | |
attr_reader :beverage | |
def initialize(beverage) | |
@beverage = beverage | |
end | |
def description | |
beverage.description + ", mocha" | |
end | |
def cost() | |
beverage.cost() + 0.20 | |
end | |
end | |
class Soy < CondimentDecorator | |
attr_reader :beverage | |
def initialize(beverage) | |
@beverage = beverage | |
end | |
def description | |
beverage.description + ", soy" | |
end | |
def cost() | |
beverage.cost() + 0.15 | |
end | |
end | |
class Whip < CondimentDecorator | |
attr_reader :beverage | |
def initialize(beverage) | |
@beverage = beverage | |
end | |
def description | |
beverage.description + ", whip" | |
end | |
def cost() | |
beverage.cost() + 0.10 | |
end | |
end | |
### | |
class StarbuzzCoffee | |
def self.start() | |
prices = [] | |
beverage1 = Espresso.new | |
prices << "%-60s $%5.2f" % [ beverage1.description, beverage1.cost() ] | |
beverage2 = DarkRoast.new | |
beverage2 = Mocha.new(beverage2) | |
beverage2 = Mocha.new(beverage2) | |
beverage2 = Whip.new(beverage2) | |
prices << "%-60s $%5.2f" % [ beverage2.description, beverage2.cost() ] | |
beverage3 = HouseBlend.new | |
beverage3 = Soy.new(beverage3) | |
beverage3 = Mocha.new(beverage3) | |
beverage3 = Whip.new(beverage3) | |
prices << "%-60s $%5.2f" % [ beverage3.description, beverage3.cost() ] | |
puts box("Brewed Coffee", prices) | |
end | |
# UTF-8 encoding table and Unicode characters | |
# http://www.utf8-chartable.de/unicode-utf8-table.pl?start=9472&unicodeinhtml=dec | |
def self.box(title, bodies, width=80) | |
lines = [] | |
lines << "╔%s╗" % ( "[ #{title} ]".center(width - 2, "═") ) | |
lines << "║%s║" % ( " " * (width - 2) ) | |
bodies.each do |body| | |
lines << "║%s║" % ( body.center(width - 2, " ") ) | |
end | |
lines << "║%s║" % ( " " * (width - 2) ) | |
lines << "╚%s╝" % ( "═" * (width - 2) ) | |
lines.join("\n") | |
end | |
end | |
if $0 == __FILE__ | |
StarbuzzCoffee.start() | |
end |
Author
wulab
commented
Sep 19, 2014
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment