1. 程式人生 > >Java設計模式之 —— 模板方法(Template Method)

Java設計模式之 —— 模板方法(Template Method)

今天你還是像往常一樣來上班,一如既往地開始了你的程式設計工作。

專案經理告訴你,今天想在伺服器端增加一個新功能,希望寫一個方法,能對Book物件進行處理,將Book物件的所有欄位以XML格式進行包裝,這樣以後可以方便與客戶端進行互動。並且在包裝開始前和結束後要列印日誌,這樣方便除錯和問題定位。

沒問題!你覺得這個功能簡直是小菜一碟,非常自信地開始寫起程式碼。

Book物件程式碼如下:

  1. publicclass Book {  
  2.     private String bookName;  
  3.     privateint pages;  
  4.     private
    double price;  
  5.     private String author;  
  6.     private String isbn;  
  7.     public String getBookName() {  
  8.         return bookName;  
  9.     }  
  10.     publicvoid setBookName(String bookName) {  
  11.         this.bookName = bookName;  
  12.     }  
  13.     publicint getPages() {  
  14.         return pages;  
  15.     }  
  16.     publicvoid setPages(int pages) {  
  17.         this.pages = pages;  
  18.     }  
  19.     publicdouble getPrice() {  
  20.         return price;  
  21.     }  
  22.     publicvoid setPrice(double price) {  
  23.         this.price = price;  
  24.     }  
  25.     public String getAuthor() {  
  26.         return author;  
  27.     }  
  28.     publicvoid setAuthor(String author) {  
  29.         this.author = author;  
  30.     }  
  31.     public String getIsbn() {  
  32.         return isbn;  
  33.     }  
  34.     publicvoid setIsbn(String isbn) {  
  35.         this.isbn = isbn;  
  36.     }  
  37. }  
然後寫一個類專門用於將Book物件包裝成XML格式:
  1. publicclass Formatter {  
  2.     public String formatBook(Book book) {  
  3.         System.out.println("format begins");  
  4.         String result = "";  
  5.         result += "<book_name>" + book.getBookName() + "</book_name>\n";  
  6.         result += "<pages>" + book.getPages() + "</pages>\n";  
  7.         result += "<price>" + book.getPrice() + "</price>\n";  
  8.         result += "<author>" + book.getAuthor() + "</author>\n";  
  9.         result += "<isbn>" + book.getIsbn() + "</isbn>\n";  
  10.         System.out.println("format finished");  
  11.         return result;  
  12.     }  
  13. }  
呼叫程式碼如下:
  1. publicclass Test {  
  2.     publicstaticvoid main(String[] args) throws Exception {  
  3.         Book book = new Book();  
  4.         book.setBookName("Thinking in Java");  
  5.         book.setPages(880);  
  6.         book.setPrice(68);  
  7.         book.setAuthor("Bruce Eckel");  
  8.         book.setIsbn("9787111213826");  
  9.         Formatter formatter = new Formatter();  
  10.         String result = formatter.formatBook(book);  
  11.         System.out.println(result);  
  12.     }  
  13. }  

你寫好了之後,迫不及待地開始執行,執行結果也完全符合你的期望。


專案經理看完後,對你非常滿意,小夥效率很高的嘛!你也非常的得意。

不過兩天之後,專案經理又找到了你,他說之前沒有考慮到需要互動的客戶端還包括手機裝置,而手機裝置都比較吃流量,用XML格式來傳輸太耗流量了,想最好能改成使用JSON格式傳輸。但是之前的XML格式也要保留,最好可以由客戶端指定使用哪種格式。

你有些不開心,心裡低估著,為什麼一開始不考慮周全呢,現在又要改遺留程式碼。但對方畢竟是領導,你還是要服從命令的,於是你開始修改Formatter類:

  1. publicclass Formatter {  
  2.     publicstaticfinalint XML = 0;  
  3.     publicstaticfinalint JSON = 1;  
  4.     public String formatBook(Book book, int format) {  
  5.         System.out.println("format begins");  
  6.         String result = "";  
  7.         if (format == XML) {  
  8.             result += "<book_name>" + book.getBookName() + "</book_name>\n";  
  9.             result += "<pages>" + book.getPages() + "</pages>\n";  
  10.             result += "<price>" + book.getPrice() + "</price>\n";  
  11.             result += "<author>" + book.getAuthor() + "</author>\n";  
  12.             result += "<isbn>" + book.getIsbn() + "</isbn>\n";  
  13.         } elseif (format == JSON) {  
  14.             result += "{\n";  
  15.             result += "\"book_name\" : \"" + book.getBookName() + "\",\n";  
  16.             result += "\"pages\" : \"" + book.getPages() + "\",\n";  
  17.             result += "\"price\" : \"" + book.getPrice() + "\",\n";  
  18.             result += "\"author\" : \"" + book.getAuthor() + "\",\n";  
  19.             result += "\"isbn\" : \"" + book.getIsbn() + "\",\n";  
  20.             result += "}";  
  21.         }  
  22.         System.out.println("format finished");  
  23.         return result;  
  24.     }  
  25. }  
呼叫程式碼如下:
  1. publicclass Test {  
  2.     publicstaticvoid main(String[] args) throws Exception {  
  3.         Book book = new Book();  
  4.         book.setBookName("Thinking in Java");  
  5. 相關推薦

    Java設計模式模板方法(Template Method)

    模式定義 需求背景 具體實現 模式定義 模板方法: 定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個演算法的結構

    Java設計模式 —— 模板方法(Template Method)

    今天你還是像往常一樣來上班,一如既往地開始了你的程式設計工作。 專案經理告訴你,今天想在伺服器端增加一個新功能,希望寫一個方法,能對Book物件進行處理,將Book物件的所有欄位以XML格式進行包裝,這樣以後可以方便與客戶端進行互動。並且在包裝開始前和結束後要列

    設計模式模板方法(Template Method)

    老板 就是 iam pre 一起 完成 nbsp str 記錄學習   在整理模板方法之前,先來說點廢話吧。除了記錄學習總結,也來記錄一下生活吧。   我們公司的老板在北京,老板也會因為項目來公司,不過不是天天來。公司有個同事,只要老板不在就天天遲到,而且一天比一天晚,經常

    設計模式模板方法Template Method

    在基類中定義一套演算法框架,子類只能更改特定的實現細節。 程式碼示例: class AbstractClass { public: void templateMethod() { func

    宋寶華:Linux裝置驅動框架裡的設計模式——模板方法(Template Method)

    本文系轉載,著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 作者: 宋寶華 來源: 微信公眾號linux閱碼場(id: linuxdev) 前言 《設計模式》這本經典的書裡面定義了20多種設計模式,雖然都是面向物件的,似乎需要C++、Java這樣的語言才能實現,但是根據筆者前面反覆

    Java設計模式模板方法模式Template Method

    本文繼續介紹23種設計模式系列之模板方法模式。概述模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法

    JAVA設計模式 模板方法模式Template Method Pattern】

    一、概述     定義一個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。它是一種類行為型模式。 二、適用場景     適用於對一些複雜的操作/演算法進行步驟分割、抽取公共部分由抽象父類實現

    java設計模式模板方法模式

    java 設計模式宋丹丹姐的一個小品,說把大象放入冰箱分為幾步驟,三步、第一步:把冰箱門打開,第二步:把大象裝進去,第三步:把冰箱門關上。就是這樣的一個小品,可以說是其實簡化的一個模板方法。把雞蛋裝進冰箱分為幾步,同樣也是這個道理。模板方法模式概念:把一些共同的行為抽象出來,作為父類公共使用,一些具體的步驟

    JAVA設計模式模板方法模式和建造者模式

    一、前期回顧 上一篇《Java 設計模式之工廠方法模式與抽象工廠模式》介紹了三種工廠模式,分別是工廠方法模式,簡單工廠方法模式,抽象工廠模式,文中詳細根據實際場景介紹了三種模式的定義,實踐,最後總結了三種方式的區別,以及各個模式的適用場景。這一篇博文我們來學習下模板方法模式和建造者模式。

    java 設計模式模板方法

    模板方法的定義 定義了一個演算法的骨架,並允許子類為一個或多個步驟提供實現。 模板方法使得子類在不改變演算法結構的情況下,重新定義某些演算法的步驟。 一次性實現一個演算法不變的部分,把可變的行為留給子類實現。 如果想拿高工資,那麼java基礎必會,設計模式和演算法要精通。JVM是進階的必選,在加上

    Java 設計模式模板方法開發中應用

    模板方法差不多是Java設計模式中除單例之外的另一種非常簡單也是我們在寫程式時非常常用的一種方法了。以至於當你看到模板方法的設計模式時你會感覺到,這不是我在程式中經常用到的方法麼。 定義:定義一個操作

    Java設計模式模板方法設計模式——寫漂亮的程式碼————

    Java設計模式,寫漂亮的程式碼 ————模板方法設計模式 簡介:  模板方法設計模式是Java設計模式中很簡單、應用非常廣泛的的一種設計模式,該模式體現了程式設計的抽象思想(抽象是所有子類的共性封裝), 僅僅使用了Java的繼承機制。其實很

    Java設計模式透析 —— 模板方法(Template Method)

    style 格式 XML nis 實現 rgs format) font 原因 轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/8744002 今天你還是像往常一樣來上班,一如既往地開始了你的編程工作。

    GOF23設計模式模板方法模式template method

    評分 end 抽象方法 abs 方法調用 轉移 pri spa 應用 一、模板方法模式概述   模板方法模式是編程中經常使用的模式。它定義了一種操作中的算法架構,將某些步驟延遲到子類中實現。這樣,新的子類可以在不改變一個算法結構的前提下重新定義該算法的某些特定步驟。   (

    Java設計模式之一——模板方法設計模式Template Method

    設計原則:不要重複 DRY(Don’t Repeat Yourself,不要複製自己) OAOO(Once and Only once,僅此一次):避免程式碼重複 GOF給出的模板方法模式定義如下: Define the skeleton of an algorith

    面向物件設計模式---模板方法模式(Template Method Pattern)

    這幾天遇到了一些事,生活中有太多的不確定性,我所能做的就是做最好的自己。爭取能把這本《大話設計模式》的讀書筆記做完吧,說真的雖然現在只是Cover到知識點,還並沒有實戰,不過我想這就是一種積累。就像之前剛閱讀完的《深入淺出MySQL》高階部分一樣,雖然蠻多還是看不懂,畢竟我不是專

    淺談java 23種設計模式模板方法模式Template

    模板方法模式:模板方法模式是類的行為模式的一種,符合開閉原則(對擴充套件開放,對修改關閉)。父類提取子類公共方法,並提供若干抽象方法供子類實現,以減少子類中的重複程式碼,並提高可複用性。示例:1.建立一個父類bird,每天只有吃和睡才能生活,但是必須要先進行吃,然後再進行睡:

    設計模式模板方法模式(Template Method)

                本來打算按照書上的講的設計模式一個一個學下來,但是讀spring原始碼的時候遇到模板方法模式,不懂,就提前先學一下。 模板方法模式就是定義一個演算法執行的骨架,而具體的演算法被延遲到子類中去實現,在spring中很多地方都使用到了模板方法模式,比如s

    設計模式與動態語言 模板方法(Template Method)

    模板方法(Template Method): 屬行為型模式,最常用,最簡便意圖: [b]定義一個操作中的演算法骨架,而將一些步驟延遲到子類中。TempeleteMethod使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。[/b]動機: 多種輸出模板適用:

    設計模式模板方法模式Template

               模板方法模式定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 何時應用: 1、需要一次性實現演算法的不變部分,並