簡介
template method(範本方法)顧名思義,
就是定義好method的內容,當作範本,讓其他程式使用。
也就是說,利用抽象類別宣告要供子類別實作的method,
然後在不能夠被繼承的(例如final)method中呼叫須被實作的method。
這個final method就是所謂的template method。
其精神即透過繼承(inheritance)的方式,讓子類別能夠實作不同的邏輯區塊,
然後在父類別的final method中,依相同順序執行不同區塊的邏輯。
如此一來,不同的子類別,能夠實作各自的方法細節,
然後統一利用父類別的final method,來執行任務。
讓我們用例子,來解釋template method pattern.
範例說明
2011年4月13日 星期三
Design Pattern - Template Method
2011年4月12日 星期二
Design Principle - Liskov's Substitution Principle (LSP)
簡介
LSP指得是在程式中使用base class(基礎類別)的地方,
都能夠改用其derived class(沿生類別),
而且不會讓程式出現非預期的結果(例如RuntimeException),
也不會影響程式原本的功能。
亦即,derived class能夠做為base class的substitution(替代品)。
反面範例
最常見的例子,就是正方形與矩形之間的關係。
數學上來說,正方形是一種(is-A)矩形,
假設有個數學系統,
須新增一個能夠計算矩形面積的程式,
會直覺地設計成:
LSP指得是在程式中使用base class(基礎類別)的地方,
都能夠改用其derived class(沿生類別),
而且不會讓程式出現非預期的結果(例如RuntimeException),
也不會影響程式原本的功能。
亦即,derived class能夠做為base class的substitution(替代品)。
反面範例
最常見的例子,就是正方形與矩形之間的關係。
數學上來說,正方形是一種(is-A)矩形,
假設有個數學系統,
須新增一個能夠計算矩形面積的程式,
會直覺地設計成:
2011年4月11日 星期一
如何在JasperReports中製作Subreport
本文介紹分成二部份,分別是Java程式碼和iReport設計畫面。
JasperReports版本為4.0.1。
首先介紹Java程式碼。
製作Subreport(子報表)的方式之一,
是使用JRMapCollectionDataSource作為Subreport的data source(資料來源)
根據官方API文件,
JRMapCollectionDataSource建構子的參數為Collection,
所以,將資料放在List裡,List中的每一個元素,則用Map來存放,
因此,存放資料的Collection的結構為:
然後,將資料塞進這個list:
就可以把list放到JRMapCollectionDataSource中:
以上,可以想像成JRMapCollectionDataSource是Database,
List是Table,Map則是Record。
完整的程式碼如下:
JasperReports版本為4.0.1。
首先介紹Java程式碼。
製作Subreport(子報表)的方式之一,
是使用JRMapCollectionDataSource作為Subreport的data source(資料來源)
根據官方API文件,
JRMapCollectionDataSource建構子的參數為Collection,
所以,將資料放在List裡,List中的每一個元素,則用Map來存放,
因此,存放資料的Collection的結構為:
然後,將資料塞進這個list:
就可以把list放到JRMapCollectionDataSource中:
以上,可以想像成JRMapCollectionDataSource是Database,
List是Table,Map則是Record。
完整的程式碼如下:
2011年4月10日 星期日
Design Principle - Interface Segregation Principle (ISP)
ISP除了有Interface Segregation Principle也就是介面分離原則外,
當然最為大家熟知的就是Internet service provider,也就是網際網路服務提供者,
這裡要介紹的當然不會是後者,而是OO(物件導向)設計原則中的ISP。
所謂的ISP,就是希望programmer在設計介面時,能夠考慮到介面中的方法,是否要放在同一個介面。
請見以下的例子:
當然最為大家熟知的就是Internet service provider,也就是網際網路服務提供者,
這裡要介紹的當然不會是後者,而是OO(物件導向)設計原則中的ISP。
所謂的ISP,就是希望programmer在設計介面時,能夠考慮到介面中的方法,是否要放在同一個介面。
請見以下的例子:
訂閱:
文章 (Atom)