百度競(jìng)價(jià) 十一 pc網(wǎng)站 手機(jī)網(wǎng)站seo技術(shù)團(tuán)隊(duì)
抽象工廠模式(Abstract Factory Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種方式,用于創(chuàng)建一系列相關(guān)或相互依賴的對(duì)象,而不需要指定它們具體的類。這種模式主要用于系統(tǒng)需要獨(dú)立于其產(chǎn)品的創(chuàng)建邏輯時(shí),并且需要能夠提供一個(gè)產(chǎn)品族的不同變體。
抽象工廠模式的主要角色
- 抽象產(chǎn)品(Abstract Product):定義了產(chǎn)品的接口,這些接口是具體產(chǎn)品必須實(shí)現(xiàn)的。
- 具體產(chǎn)品(Concrete Product):實(shí)現(xiàn)了抽象產(chǎn)品的接口,這些是被創(chuàng)建的具體產(chǎn)品對(duì)象。
- 抽象工廠(Abstract Factory):聲明了一組工廠方法,用于創(chuàng)建抽象產(chǎn)品。
- 具體工廠(Concrete Factory):實(shí)現(xiàn)了抽象工廠接口,生成一組相關(guān)或依賴的抽象產(chǎn)品對(duì)象。
抽象工廠模式的實(shí)現(xiàn)步驟
- 定義抽象產(chǎn)品:創(chuàng)建一個(gè)或多個(gè)抽象類或接口,定義產(chǎn)品需要實(shí)現(xiàn)的方法。
- 實(shí)現(xiàn)具體產(chǎn)品:為每種產(chǎn)品提供一個(gè)具體的類,實(shí)現(xiàn)或繼承抽象產(chǎn)品類。
- 定義抽象工廠:創(chuàng)建一個(gè)包含多個(gè)創(chuàng)建產(chǎn)品方法的抽象類或接口,這些方法返回抽象產(chǎn)品類型的對(duì)象。
- 實(shí)現(xiàn)具體工廠:為每種產(chǎn)品族提供一個(gè)具體的工廠類,實(shí)現(xiàn)抽象工廠中的工廠方法,生成具體產(chǎn)品對(duì)象。
抽象工廠模式的代碼示例
// 抽象產(chǎn)品A
interface ProductA {void use();
}// 具體產(chǎn)品A1
class ConcreteProductA1 implements ProductA {public void use() {System.out.println("Using ProductA1");}
}// 具體產(chǎn)品A2
class ConcreteProductA2 implements ProductA {public void use() {System.out.println("Using ProductA2");}
}// 抽象產(chǎn)品B
interface ProductB {void use();
}// 具體產(chǎn)品B1
class ConcreteProductB1 implements ProductB {public void use() {System.out.println("Using ProductB1");}
}// 具體產(chǎn)品B2
class ConcreteProductB2 implements ProductB {public void use() {System.out.println("Using ProductB2");}
}// 抽象工廠
interface AbstractFactory {ProductA createProductA();ProductB createProductB();
}// 具體工廠1
class ConcreteFactory1 implements AbstractFactory {public ProductA createProductA() {return new ConcreteProductA1();}public ProductB createProductB() {return new ConcreteProductB1();}
}// 具體工廠2
class ConcreteFactory2 implements AbstractFactory {public ProductA createProductA() {return new ConcreteProductA2();}public ProductB createProductB() {return new ConcreteProductB2();}
}// 客戶端代碼
public class AbstractFactoryPatternDemo {public static void main(String[] args) {AbstractFactory factory1 = new ConcreteFactory1();ProductA productA1 = factory1.createProductA();ProductB productB1 = factory1.createProductB();productA1.use();productB1.use();AbstractFactory factory2 = new ConcreteFactory2();ProductA productA2 = factory2.createProductA();ProductB productB2 = factory2.createProductB();productA2.use();productB2.use();}
}
抽象工廠模式的優(yōu)點(diǎn)
- 隔離接口和實(shí)現(xiàn):客戶端不需要知道具體的產(chǎn)品類,只需要知道抽象產(chǎn)品接口。
- 擴(kuò)展性:增加新產(chǎn)品族時(shí),不需要修改已有代碼,只需要增加新的具體工廠和具體產(chǎn)品。
- 解耦:具體產(chǎn)品類的實(shí)現(xiàn)對(duì)客戶端完全透明。
抽象工廠模式的缺點(diǎn)
- 增加新產(chǎn)品困難:增加新的具體產(chǎn)品需要擴(kuò)展抽象工廠接口,這可能需要修改抽象工廠和所有具體工廠類。
- 系統(tǒng)復(fù)雜度:對(duì)于新的開(kāi)發(fā)者來(lái)說(shuō),理解系統(tǒng)結(jié)構(gòu)可能需要更多的時(shí)間。
抽象工廠模式和工廠方法模式(簡(jiǎn)單工廠模式)的區(qū)別
簡(jiǎn)單工廠模式(Simple Factory Pattern)
- 單一職責(zé):簡(jiǎn)單工廠模式有一個(gè)工廠類負(fù)責(zé)所有相關(guān)產(chǎn)品的實(shí)例化工作。
- 創(chuàng)建方式:工廠類通常包含一個(gè)方法,根據(jù)傳入的參數(shù)決定創(chuàng)建并返回哪種具體產(chǎn)品類的實(shí)例。
- 擴(kuò)展性:增加新產(chǎn)品時(shí),需要修改工廠類中的邏輯,違反了開(kāi)閉原則。
- 產(chǎn)品族:簡(jiǎn)單工廠模式通常只負(fù)責(zé)一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)的創(chuàng)建,即一個(gè)接口或抽象類下的所有具體類的創(chuàng)建。
- 代碼簡(jiǎn)潔:實(shí)現(xiàn)簡(jiǎn)單,易于理解和使用。
抽象工廠模式(Abstract Factory Pattern)
- 多個(gè)工廠:抽象工廠模式包含多個(gè)工廠,每個(gè)工廠負(fù)責(zé)創(chuàng)建一族相關(guān)的產(chǎn)品。
- 創(chuàng)建方式:通過(guò)一組工廠方法來(lái)創(chuàng)建相關(guān)產(chǎn)品,每個(gè)工廠方法返回一個(gè)抽象產(chǎn)品類型的對(duì)象。
- 擴(kuò)展性:增加新產(chǎn)品族時(shí),只需增加一個(gè)新的具體工廠和對(duì)應(yīng)的具體產(chǎn)品類,不需要修改已有代碼,符合開(kāi)閉原則。
- 產(chǎn)品族:抽象工廠模式可以處理多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),即多個(gè)接口或抽象類下的所有具體類的創(chuàng)建。
- 系統(tǒng)復(fù)雜度:實(shí)現(xiàn)較為復(fù)雜,需要定義多個(gè)抽象產(chǎn)品和工廠接口。