每天一種設計模式 模板方法

2021-08-31 19:23:34 字數 1710 閱讀 1534

《松本行弘的程式世界》對模板方法(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...