工廠方法設(shè)計(jì)模式是一種使用工廠原則的創(chuàng)造型模式。工廠原則就是 通過(guò)調(diào)用一個(gè)方法,這個(gè)方法創(chuàng)造一個(gè)對(duì)象的實(shí)例然后將它返回。通過(guò)向這個(gè)方法傳遞參數(shù)來(lái)決定返回哪個(gè)類型的對(duì)象。
工廠方法設(shè)計(jì)模式使用繼承來(lái)決定返回哪個(gè)對(duì)象。基礎(chǔ)的創(chuàng)造類是抽象的。而具體的創(chuàng)造類繼承這個(gè)基類。工廠方法在基類中聲明。如果工廠方法是抽象的,那么所有繼承這個(gè)類的類都必須有這個(gè)方法。如果不是,則可以根據(jù)需要選擇覆蓋它與否。
當(dāng)一個(gè)類想實(shí)例化其中一個(gè)具體類的實(shí)例時(shí),這個(gè)類就可以通過(guò)調(diào)用具體類的工廠方法來(lái)生成正確的對(duì)象。
舉例來(lái)說(shuō),假設(shè)我們有兩個(gè)類,Product1和Product2。為了能接收到這兩個(gè)類任何一個(gè)的實(shí)例,我們必須讓他們繼承或?qū)崿F(xiàn)相同的類或接口。我們創(chuàng)造一個(gè)叫做Creator的抽象類。如下:

public abstract class Creator
{
public abstract getProduct();
}
現(xiàn)在我們創(chuàng)造兩個(gè)類繼承Creator,叫做Product1Creator和Product2Creator。每一個(gè)都有一個(gè)getProduct方法。
例如Product1Creator:

public class Product1Creator extends Creator
{


public Product getProduct()
{
return new Product1();
}
}
工廠方法設(shè)計(jì)模式使用繼承來(lái)決定返回哪個(gè)對(duì)象。基礎(chǔ)的創(chuàng)造類是抽象的。而具體的創(chuàng)造類繼承這個(gè)基類。工廠方法在基類中聲明。如果工廠方法是抽象的,那么所有繼承這個(gè)類的類都必須有這個(gè)方法。如果不是,則可以根據(jù)需要選擇覆蓋它與否。
當(dāng)一個(gè)類想實(shí)例化其中一個(gè)具體類的實(shí)例時(shí),這個(gè)類就可以通過(guò)調(diào)用具體類的工廠方法來(lái)生成正確的對(duì)象。
舉例來(lái)說(shuō),假設(shè)我們有兩個(gè)類,Product1和Product2。為了能接收到這兩個(gè)類任何一個(gè)的實(shí)例,我們必須讓他們繼承或?qū)崿F(xiàn)相同的類或接口。我們創(chuàng)造一個(gè)叫做Creator的抽象類。如下:





例如Product1Creator:










