模板方法模式是將公用的**抽取到父類,並定義可變部分由子類實現的一種模式。
玩家玩遊戲的時候會給角色配置服裝,那麼不可避免給每個玩家都例項乙個player物件,並且設定服裝。
package com.rabbit.pattern.template;
/** * created by vip on 2018/3/9.
*/public class playera
public void trousers()
public void coat()
public void shoes()
public void wear()
}
package com.rabbit.pattern.template;
/** * created by vip on 2018/3/9.
*/public class playerb
public void trousers()
public void coat()
public void shoes()
public void wear()
}
package com.rabbit.pattern.template;
/** * created by vip on 2018/3/9.
*/public class demo
}
這樣的實現方式可能已經發現問題了,首先playera和playerb的wear方法都是一樣的,並且其它的clothes/trousers/ coat /shoes方法都是根據使用者自定義的去實現。模板方法模式的描述是:抽取公共的給父類,並且定義可變部分由子類實現。
類圖
**抽取父類
package com.rabbit.pattern.template;
/** * created by vip on 2018/3/9.
*/public abstract class player
}
玩家a裝扮package com.rabbit.pattern.template;
/** * created by vip on 2018/3/9.
*/public class playera extends player
@override
protected void trousers()
@override
protected void coat()
@override
protected void shoes()
}
玩家b裝扮
package com.rabbit.pattern.template;
/** * created by vip on 2018/3/9.
*/public class playerb extends player
@override
protected void trousers()
@override
protected void coat()
@override
protected void shoes()
}
demo
package com.rabbit.pattern.template;
/** * created by vip on 2018/3/9.
*/public class demo
}
看到模板方法模式的實現方式,可能大家就恍然大悟原來抽象繼承就是一種設計模式。我們在程式設計的過程中可能無意就使用到了某種設計模式,但是由於沒有系統的學習設計模式不知道自己使用了而已。很多設計模式直接大致相同,只是在職責上有所區別而已。例如裝飾者模式和**模式。
優點1) 將不變的行為抽取到超類,出去了子類中重複的**。比較物件導向程式設計就是要去除重複嘛。
設計模式(九) 模板方法
什麼是模板方法模式?模板方法 templatemethod 定義乙個操作中的演算法骨架,將一些步驟延遲到子類。模板方方法使得子類可以不改變演算法結構,即可重定義演算法的某些步驟。簡單來說,模板方法就是定義了做事情的步驟,而這些具體的步驟會根據需求少許改變,但總的步驟結構不變。模板方法最大的優點在於將...
模板設計模式 PHP設計模式之模板方法模式
模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...
設計模式之模板方法設計模式
父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...