日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > Android 設計模式之模板方法模式

Android 設計模式之模板方法模式

來源:程序員人生   發布時間:2014-09-27 04:22:51 閱讀次數:2008次

模板方法模式的定義:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。

設計原則:別調用我們,我會調用你,(就好比獵頭和求職者,求職者不需要去找獵頭,獵頭只要有工作就會找到你)稱之為好萊塢原則

引用一個例子,一個店中有兩飲料:咖啡和茶,他們的沖泡方法

第一步:都是要用沸水

第二步:用熱水泡咖啡或茶

第三步:把飲料倒進杯子

第四步:在飲料中加入適當的調料

在上面的步驟中一、三是一樣的,可以抽取出來放在基類中,二、四不一樣,可以抽象出來,讓子類去實現,以下是飲料抽象的父類,父類可以讓未知的子類去做它本身可能完成的不好或者根本完成不了的事情;可以加一個鉤子函數:custcomerWantsCondiments(),請子類去重寫。

CoffeineBeverageWithHook.java

package com.dzt.template; /** * 由于有的客戶有可能不需要調料,這時就需要讓客戶去選擇是否來添加調料,需要 * * @author Administrator * */ public abstract class CoffeineBeverageWithHook { void prepareRecipe() { boilWater(); brew(); pourInCup(); if (custcomerWantsCondiments()) addCondiments(); } abstract void brew(); // 沖泡 abstract void addCondiments(); // 添加調料 // 燒開水 void boilWater() { System.out .println("CoffeineBeverageWithHook-------------------->boilWater"); } // 把飲料倒進杯子 void pourInCup() { System.out .println("CoffeineBeverageWithHook-------------------->pourInCup"); } /** * 子類可以重載這個函數 * * @return */ boolean custcomerWantsCondiments() { return true; } }

以下是咖啡類,繼承了上面的飲料父類

CoffeineWithHook.java

package com.dzt.template; public class CoffeineWithHook extends CoffeineBeverageWithHook { @Override void brew() { // TODO Auto-generated method stub System.out.println("CoffeineWithHook-------------------->brew"); } @Override void addCondiments() { // TODO Auto-generated method stub System.out .println("CoffeineWithHook-------------------->addCondiments"); } @Override boolean custcomerWantsCondiments() { // TODO Auto-generated method stub return false; } }

以下是茶類,繼承了上面的飲料父類

TeaWithHook.java

package com.dzt.template; public class TeaWithHook extends CoffeineBeverageWithHook { @Override void brew() { // TODO Auto-generated method stub System.out.println("TeaWithHook-------------------->brew"); } @Override void addCondiments() { // TODO Auto-generated method stub System.out.println("TeaWithHook-------------------->addCondiments"); } @Override boolean custcomerWantsCondiments() { // TODO Auto-generated method stub return true; } }


以上代碼可以去修改custcomerWantsCondiments()函數,由用戶決定是否需要添加調料

測試代碼

package com.dzt.template; /** * 模板方法模式 在模板方法中添加鉤子方法,讓用戶決定 * * @author Administrator * @date 2014.08.20 */ public class TemplateMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub CoffeineWithHook coffHook = new CoffeineWithHook(); TeaWithHook teaHook = new TeaWithHook(); coffHook.prepareRecipe(); System.out .println("---------------------------------------------------------------"); teaHook.prepareRecipe(); } }

總結:

1、模板方法是一種代碼復用的基本技術。它們在類庫中尤為重要,它們提取了類庫中的公共行為。
2、模板方法導致一種方向控制結構,"好萊塢法則":"Don't call me,i will call you.",即一個父類調用子類的操作,而不是相反。
3、模板調用操作的類型有具體的操作,具體的AbstracClass操作,原語操作,工廠方法,鉤子操作。少定義原語操作。
4、模板方法使用繼承來改變算法的一部分。策略模式使用委托來改變整個算法。

相關代碼:http://download.csdn.net/detail/deng0zhaotai/7835511

參考書籍:《Head First 設計模式》

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产一区二区三区成人 | 久久久女女女女999久久 | 国产成人精品一区二区三区四区 | 久久视频一区 | √8天堂资源地址中文在线 99久久视频 | 视频精品久久 | 免费99视频 | 美女二区 | 五月婷婷六月丁香 | 欧美视频区| 精品视频一区二区三区 | 日本天堂在线观看 | 一区二区三区日韩欧美 | 久久只有精品 | 国产成人精品一区 | 国产免费一区 | 99久久综合国产精品二区国产 | 91精品国产乱码久久久久久 | 91短视频黄 | 欧美一区二区三区公司 | 天天干天天射综合网 | 国产在线看片 | 综合久久国产九一剧情麻豆 | 久久久青草婷婷精品综合日韩 | 欧美一区二区三区成人 | 国产精品一区二区三区不卡 | 性色av一区二区三区 | 免费观看一级毛片 | 国产三级在线播放 | 人人cao | 国产精品视屏 | h片在线| 亚洲一级毛片 | 看全色黄大色黄女片爽在线看 | 日本精品视频一区二区 | 国产精品成人av | 欧美做受 | 久久伊人精品视频 | 精品国产91乱码一区二区三区 | 国产h片在线观看 | √天堂8在线网 |