本文要介紹的是bridge pattern(橋樑模式、橋接器模式、橋模式),
其精神在於降低abstraction和implementor之間的coupling(耦合度)
讓abstraction在延伸子類別時,
不用擔心因為implementor的改變,而須修改子類別的程式碼。
接下來,使用正反兩個例子來說明bridge pattern。
要設計Android上的遊戲叫做AngryBee,要怎麼做呢?
2011年4月18日 星期一
Design Pattern - Bridge
2011年4月13日 星期三
Design Pattern - Template Method
簡介
template method(範本方法)顧名思義,
就是定義好method的內容,當作範本,讓其他程式使用。
也就是說,利用抽象類別宣告要供子類別實作的method,
然後在不能夠被繼承的(例如final)method中呼叫須被實作的method。
這個final method就是所謂的template method。
其精神即透過繼承(inheritance)的方式,讓子類別能夠實作不同的邏輯區塊,
然後在父類別的final method中,依相同順序執行不同區塊的邏輯。
如此一來,不同的子類別,能夠實作各自的方法細節,
然後統一利用父類別的final method,來執行任務。
讓我們用例子,來解釋template method pattern.
範例說明
template method(範本方法)顧名思義,
就是定義好method的內容,當作範本,讓其他程式使用。
也就是說,利用抽象類別宣告要供子類別實作的method,
然後在不能夠被繼承的(例如final)method中呼叫須被實作的method。
這個final method就是所謂的template method。
其精神即透過繼承(inheritance)的方式,讓子類別能夠實作不同的邏輯區塊,
然後在父類別的final method中,依相同順序執行不同區塊的邏輯。
如此一來,不同的子類別,能夠實作各自的方法細節,
然後統一利用父類別的final method,來執行任務。
讓我們用例子,來解釋template method pattern.
範例說明
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在設計介面時,能夠考慮到介面中的方法,是否要放在同一個介面。
請見以下的例子:
2010年10月9日 星期六
寶寶
記得你在肚子裡的時候 隨著我的呼吸一起脈動
偶爾會伸展拳腳做運動 讓我感覺你的活力活潑
你的出現讓我變得激動 一點小事就會情緒失落
噁心反胃失眠煩躁都有 但為了你這都不算什麼
大家都說 母親是小孩最溫暖的港口
對我來說 你才是我最窩心的暖流
喜歡看你熟睡的臉孔 天真無邪沒有半點憂愁
喜歡看你吸吮著指頭 專注表情看起來好可口
喜歡看你小手握著我 有點用力捨不得放開手
喜歡看你窩在我懷中 小小身軀有大大的感動
偶爾會伸展拳腳做運動 讓我感覺你的活力活潑
你的出現讓我變得激動 一點小事就會情緒失落
噁心反胃失眠煩躁都有 但為了你這都不算什麼
大家都說 母親是小孩最溫暖的港口
對我來說 你才是我最窩心的暖流
喜歡看你熟睡的臉孔 天真無邪沒有半點憂愁
喜歡看你吸吮著指頭 專注表情看起來好可口
喜歡看你小手握著我 有點用力捨不得放開手
喜歡看你窩在我懷中 小小身軀有大大的感動
2010年7月29日 星期四
釵頭鳳
溫香暖玉如袖 纏綿緋側如昨
緣起緣落 任憑著墨 猜不透 沉默
來世承諾如破 白首偕老如垢
花開花落 幾番琢磨 看不破 消瘦
紅酥手 黃藤酒 古箏聲聲聲離愁
院裡鎖清秋 門前青苔厚
雨滴落 暈了一地斑駁
映著殘破輪廓 誰人可看透
秋柳落 白髮錯 獨角戲戲戲寂寞
昔時依人朽 徒留回憶舊
雨漸濃 蘊成一池湖泊
載著一葉枯舟 無處可停泊
緣起緣落 任憑著墨 猜不透 沉默
來世承諾如破 白首偕老如垢
花開花落 幾番琢磨 看不破 消瘦
紅酥手 黃藤酒 古箏聲聲聲離愁
院裡鎖清秋 門前青苔厚
雨滴落 暈了一地斑駁
映著殘破輪廓 誰人可看透
秋柳落 白髮錯 獨角戲戲戲寂寞
昔時依人朽 徒留回憶舊
雨漸濃 蘊成一池湖泊
載著一葉枯舟 無處可停泊
訂閱:
文章 (Atom)