《松本行弘的程式世界》對模板方法(template method)的說明非常清晰:
在父類的乙個方法中定義演算法的框架,其中幾個步驟的具體內容則留給子類來實現。
class a
def initialize
@name = "jinbin"
@word = "hello"
end
def say_word
puts "welcome to new company"
puts "#@word,#@name"
end
enda=a.new
a.say_word
某天,需求忽然增加了,不僅要適用於公司,還需要適用於學校。still easy:
class a
def initialize
@name = "jinbin"
@word = "hello"
end
def say_word symbol
if symbol == "company"
puts "welcome to new company"
elsif symbol == "school"
puts "welcome to new school"
end
puts "#@word,#@name"
end
enda=a.new
a.say_word "company"
a.say_word "school"
然後又有一天,需求又變了,原來的歡迎詞太單調了,希望針對不同場景設計不同的歡迎詞;然後又希望能增加對醫院、法院等等場景的支援,然後又有一天,希望你能支援歡迎多人的工作。。。
ok!我們冷靜一下,思考下最基本的問題,什麼是在變的?什麼是保持不變的?
場景在變,以及對應的歡迎詞在變化,但是歡迎詞的輸出步驟沒有變化,一段描述性文字,再加上個人資訊。ok,我們將變與不變的部分分離開。
class a
def initialize
@name = "jinbin"
@word = "hello"
end
def say_word
say_welcome
say_personal
end
def say_welcome
raise "called abstract method : say_welcome"
end
def say_personal
raise "called abstract method : say_personal"
end
endclass company_welcome < a
def say_welcome
puts "welcome to new company"
end
def say_personal
puts "#@word,#@name"
end
enda=company_welcome.new
a.say_word
no matter 你的場景怎麼變,我只需要根據你的需求編寫繼承類中對應的方法就ok了。
template method pattern 也許是gof pattern中最簡單的一種了。
每天學一種設計模式
目前常用的設計模式有23種,何為設計模式?神聖嗎?難學嗎?只要堅持學,用,總結,都不難。設計模式說白了就是前人總結的設計經驗,用的多了也就熟練了,但是也不要生搬硬套的去用,我們平時或多或少都有接觸,只不過沒有細緻歸納,總體分為三大型別,建立型 結構型 行為型,後面會一一詳細介紹。一 建立型模式 工廠...
每天一種演算法 選擇排序
選擇排序是這樣的,首先,找到最小的乙個數,放在第乙個位置,然後在剩下的元素中,找到最小的 放在第二個位置,再在除過這兩個元素的剩下的裡面找到最小的,就是第三小。這樣依次類推。最後得到的數列,就是從小到大了。這個排序的效率不是很高。如果有100個數,要比較100 99 98 1 次。package b...
每天一設計模式之原型模式
每天一設計模式之原型模式 原型模式 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件 原型模式結構圖 深複製樣例 xiefei package com.test public class xiefei public void setname string name public int...