Prototype Pattern顧名思義,
就是定義出一個prototype(原型),
然後利用這個原型,來產生物件。
產生的方式不同於Factory Pattern中使用的new,
而是利用clone(複製)。
因此,在介紹Prototype pattern之前,得先了解何謂clone。
2011年4月20日 星期三
Design Pattern - Prototype
標籤:
工廠方法模式,
物件導向,
原型模式,
設計模式,
Design pattern,
Factory Method,
Java,
OO,
OOA,
OOAD,
OOD,
OOP,
Prototype Pattern
2011年4月19日 星期二
Design Pattern - Factory
Factory Pattern(工廠模式),在某些介紹中,會被稱為Simple Factory Pattern(簡單工廠模式),
看到名稱,就知道這個模式非常的簡單,很可能閣下已經不知不覺地使用工廠模式很多年了。
在介紹此模式之前,我們先來看一個沒有套用工廠模式的例子,然後設法將這個例子加以修改成工廠模式。
看到名稱,就知道這個模式非常的簡單,很可能閣下已經不知不覺地使用工廠模式很多年了。
在介紹此模式之前,我們先來看一個沒有套用工廠模式的例子,然後設法將這個例子加以修改成工廠模式。
標籤:
工廠方法模式,
工廠模式,
抽象工廠模式,
物件導向,
設計模式,
鬆散耦合,
Design pattern,
Factory Method,
Factory Pattern,
Java,
loose coupling,
OO,
OOA,
OOAD,
OOD,
OOP
2011年4月18日 星期一
Design Pattern - Bridge
本文要介紹的是bridge pattern(橋樑模式、橋接器模式、橋模式),
其精神在於降低abstraction和implementor之間的coupling(耦合度)
讓abstraction在延伸子類別時,
不用擔心因為implementor的改變,而須修改子類別的程式碼。
接下來,使用正反兩個例子來說明bridge pattern。
要設計Android上的遊戲叫做AngryBee,要怎麼做呢?
其精神在於降低abstraction和implementor之間的coupling(耦合度)
讓abstraction在延伸子類別時,
不用擔心因為implementor的改變,而須修改子類別的程式碼。
接下來,使用正反兩個例子來說明bridge pattern。
要設計Android上的遊戲叫做AngryBee,要怎麼做呢?
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在設計介面時,能夠考慮到介面中的方法,是否要放在同一個介面。
請見以下的例子:
訂閱:
文章 (Atom)