將實作體系與抽象體系分離開來,讓兩者能各自更動各自演進。
建立多個餐廳,而每間餐廳內還有雞肉類套餐
利用繼承設計模式
若是以後再增加更多不同餐廳或者不同食物,就又需要增加更多的繼承關係
利用組合來代替繼承-橋接模式(Bridge)
class Restaurant
def initialize(food)
@food = food
end
def order
"任一餐廳:\n"\
"#{@food.make}"
end
end
class McDonald < Restaurant
def order
"麥當勞:\n"\
"#{@food.make}"
end
end
class KFC < Restaurant
def order
"肯德基:\n"\
"#{@food.make}"
end
end
class Napoli < Restaurant
def order
"拿坡里:\n"\
"#{@food.make}"
end
end
class Chicken
def make
raise NotImplementedError, "#{self.class} has not implemented method '#{__method__}'"
end
end
class ChickenThigh < Chicken
def make
'雞腿'
end
end
class ChickenWing < Chicken
def make
'雞翅'
end
end
class ChickenBreast < Chicken
def make
'雞胸'
end
end
def client(abstraction)
print abstraction.order
end
c_b = ChickenBreast.new
r_b = Restaurant.new(c_b)
client(r_b) #任一餐廳:雞胸
puts "\n\n"
c_t = ChickenThigh.new
m_t = McDonald.new(c_t)
client(m_t) #麥當勞:雞腿
在這設計模式中,首先找出變化部分並且額外封裝。此外將這些關係利用物件聚合,而非類別繼承
而使用物件聚合的目的在於能夠使互相獨立的類別中,包含變化,使未來在新增時,不會影響原本的程式碼
文章不定期更新!
感謝大家 如有問題,再煩請大家指教!