什么是工廠模式?
工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種統(tǒng)一的方式來(lái)創(chuàng)建對(duì)象,隱藏了對(duì)象的創(chuàng)建細(xì)節(jié),使客戶端代碼與具體類的實(shí)例化過(guò)程解耦。工廠模式可以幫助您在不暴露對(duì)象創(chuàng)建細(xì)節(jié)的情況下實(shí)例化對(duì)象,從而提高代碼的靈活性和可維護(hù)性。
工廠模式通常涉及以下幾個(gè)角色:
- 產(chǎn)品(Product): 這是一個(gè)抽象類或接口,它定義了工廠方法所創(chuàng)建的對(duì)象的共同接口。具體的產(chǎn)品類將實(shí)現(xiàn)這個(gè)接口。
- 具體產(chǎn)品(Concrete Product): 這些是實(shí)現(xiàn)了產(chǎn)品接口的具體類,它們是工廠方法所創(chuàng)建的對(duì)象的實(shí)際實(shí)例。
- 工廠(Factory):這是一個(gè)抽象類或接口,它聲明了一個(gè)工廠方法,該方法返回一個(gè)產(chǎn)品對(duì)象。具體的工廠類將實(shí)現(xiàn)這個(gè)工廠方法來(lái)創(chuàng)建具體產(chǎn)品的實(shí)例。
- 具體工廠(Concrete Factory): 這些是實(shí)現(xiàn)了工廠接口的具體類,它們負(fù)責(zé)實(shí)際創(chuàng)建具體產(chǎn)品的實(shí)例。
工廠模式的主要優(yōu)點(diǎn)包括:
- 隱藏了對(duì)象的創(chuàng)建細(xì)節(jié),客戶端代碼不需要知道具體的實(shí)例化過(guò)程。
- 提高了代碼的靈活性和可維護(hù)性,因?yàn)榭蛻舳舜a與具體類解耦。
- 可以根據(jù)需要使用不同的工廠來(lái)創(chuàng)建不同的產(chǎn)品實(shí)例,從而實(shí)現(xiàn)了多態(tài)性。
工廠模式的一些常見(jiàn)實(shí)現(xiàn)包括:
- 簡(jiǎn)單工廠模式:由一個(gè)工廠類根據(jù)不同的條件創(chuàng)建不同的產(chǎn)品實(shí)例。
- 工廠方法模式:每個(gè)具體產(chǎn)品對(duì)應(yīng)一個(gè)具體工廠,每個(gè)具體工廠只負(fù)責(zé)創(chuàng)建一個(gè)具體產(chǎn)品。
- 抽象工廠模式:多個(gè)抽象產(chǎn)品對(duì)應(yīng)多個(gè)抽象工廠,每個(gè)具體工廠負(fù)責(zé)創(chuàng)建一組具體產(chǎn)品。
工廠模式在實(shí)際應(yīng)用中廣泛使用,它幫助解決了對(duì)象的創(chuàng)建問(wèn)題,使代碼更具擴(kuò)展性和可維護(hù)性。
簡(jiǎn)單工廠模式代碼案例
import java.util.HashMap;
import java.util.Map;
/**
* @author Wang
*/
public class SynFileFactory {
private final static Map<String, AbstractSynFileHandler<?>> DATA_MESSAGE_FORWARD_MAPPING = new HashMap<>();
private SynFileFactory() {
}
public static void registerHandler(String fileName, AbstractSynFileHandler<?> handler) {
DATA_MESSAGE_FORWARD_MAPPING.put(fileName, handler);
}
public static AbstractSynFileHandler<?> getHandler(String fileName) {
return DATA_MESSAGE_FORWARD_MAPPING.get(fileName);
}
}
在這個(gè)代碼中,SynFileFactory 就充當(dāng)了一個(gè)工廠類的角色。工廠類的主要目的是創(chuàng)建和管理對(duì)象的實(shí)例,以及提供一種統(tǒng)一的方式來(lái)獲取對(duì)象。
在這個(gè)工廠類中:
- DATA_MESSAGE_FORWARD_MAPPING 是一個(gè)存儲(chǔ)不同文件處理器的映射關(guān)系的集合。
- registerHandler 方法用于將文件名和對(duì)應(yīng)的文件處理器注冊(cè)到映射集合中。
- getHandler 方法用于根據(jù)文件名從映射集合中獲取對(duì)應(yīng)的文件處理器。
通過(guò)這個(gè)工廠類,您可以動(dòng)態(tài)地注冊(cè)不同的文件處理器,并在需要時(shí)獲取正確的處理器實(shí)例,而無(wú)需了解具體的實(shí)現(xiàn)細(xì)節(jié)。這種方式可以使客戶端代碼與具體的文件處理器類解耦,使得代碼更加靈活、可維護(hù)和可擴(kuò)展。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-656252.html
總之,這段代碼實(shí)現(xiàn)了工廠模式,它提供了一個(gè)集中管理和創(chuàng)建不同類型對(duì)象的方式,幫助減少了代碼的耦合性并提高了可維護(hù)性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-656252.html
到了這里,關(guān)于Java設(shè)計(jì)模式 (二) 工廠模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!