百度競價 十一 pc網站 手機網站seo技術團隊
抽象工廠模式(Abstract Factory Pattern)是一種創(chuàng)建型設計模式,它提供了一種方式,用于創(chuàng)建一系列相關或相互依賴的對象,而不需要指定它們具體的類。這種模式主要用于系統(tǒng)需要獨立于其產品的創(chuàng)建邏輯時,并且需要能夠提供一個產品族的不同變體。
抽象工廠模式的主要角色
- 抽象產品(Abstract Product):定義了產品的接口,這些接口是具體產品必須實現(xiàn)的。
- 具體產品(Concrete Product):實現(xiàn)了抽象產品的接口,這些是被創(chuàng)建的具體產品對象。
- 抽象工廠(Abstract Factory):聲明了一組工廠方法,用于創(chuàng)建抽象產品。
- 具體工廠(Concrete Factory):實現(xiàn)了抽象工廠接口,生成一組相關或依賴的抽象產品對象。
抽象工廠模式的實現(xiàn)步驟
- 定義抽象產品:創(chuàng)建一個或多個抽象類或接口,定義產品需要實現(xiàn)的方法。
- 實現(xiàn)具體產品:為每種產品提供一個具體的類,實現(xiàn)或繼承抽象產品類。
- 定義抽象工廠:創(chuàng)建一個包含多個創(chuàng)建產品方法的抽象類或接口,這些方法返回抽象產品類型的對象。
- 實現(xiàn)具體工廠:為每種產品族提供一個具體的工廠類,實現(xiàn)抽象工廠中的工廠方法,生成具體產品對象。
抽象工廠模式的代碼示例
// 抽象產品A
interface ProductA {void use();
}// 具體產品A1
class ConcreteProductA1 implements ProductA {public void use() {System.out.println("Using ProductA1");}
}// 具體產品A2
class ConcreteProductA2 implements ProductA {public void use() {System.out.println("Using ProductA2");}
}// 抽象產品B
interface ProductB {void use();
}// 具體產品B1
class ConcreteProductB1 implements ProductB {public void use() {System.out.println("Using ProductB1");}
}// 具體產品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)點
- 隔離接口和實現(xiàn):客戶端不需要知道具體的產品類,只需要知道抽象產品接口。
- 擴展性:增加新產品族時,不需要修改已有代碼,只需要增加新的具體工廠和具體產品。
- 解耦:具體產品類的實現(xiàn)對客戶端完全透明。
抽象工廠模式的缺點
- 增加新產品困難:增加新的具體產品需要擴展抽象工廠接口,這可能需要修改抽象工廠和所有具體工廠類。
- 系統(tǒng)復雜度:對于新的開發(fā)者來說,理解系統(tǒng)結構可能需要更多的時間。
抽象工廠模式和工廠方法模式(簡單工廠模式)的區(qū)別
簡單工廠模式(Simple Factory Pattern)
- 單一職責:簡單工廠模式有一個工廠類負責所有相關產品的實例化工作。
- 創(chuàng)建方式:工廠類通常包含一個方法,根據(jù)傳入的參數(shù)決定創(chuàng)建并返回哪種具體產品類的實例。
- 擴展性:增加新產品時,需要修改工廠類中的邏輯,違反了開閉原則。
- 產品族:簡單工廠模式通常只負責一個產品等級結構的創(chuàng)建,即一個接口或抽象類下的所有具體類的創(chuàng)建。
- 代碼簡潔:實現(xiàn)簡單,易于理解和使用。
抽象工廠模式(Abstract Factory Pattern)
- 多個工廠:抽象工廠模式包含多個工廠,每個工廠負責創(chuàng)建一族相關的產品。
- 創(chuàng)建方式:通過一組工廠方法來創(chuàng)建相關產品,每個工廠方法返回一個抽象產品類型的對象。
- 擴展性:增加新產品族時,只需增加一個新的具體工廠和對應的具體產品類,不需要修改已有代碼,符合開閉原則。
- 產品族:抽象工廠模式可以處理多個產品等級結構,即多個接口或抽象類下的所有具體類的創(chuàng)建。
- 系統(tǒng)復雜度:實現(xiàn)較為復雜,需要定義多個抽象產品和工廠接口。