設(shè)計(jì)模式是軟件工程中解決特定問(wèn)題的經(jīng)典方案,而工廠模式作為創(chuàng)建型模式的代表,在Java開(kāi)發(fā)中應(yīng)用廣泛。本文結(jié)合B站尚硅谷課程精華,系統(tǒng)工廠模式的三種形式,輔以圖解和代碼實(shí)戰(zhàn),并探討其在項(xiàng)目策劃與公關(guān)服務(wù)系統(tǒng)中的實(shí)際應(yīng)用。
一、工廠模式概述
工廠模式的核心思想是將對(duì)象的創(chuàng)建與使用分離,通過(guò)一個(gè)統(tǒng)一的接口來(lái)創(chuàng)建對(duì)象,降低客戶端與具體產(chǎn)品類之間的耦合度。它主要分為三種形式:簡(jiǎn)單工廠模式、工廠方法模式和抽象工廠模式。
二、三種工廠模式詳解與圖解
1. 簡(jiǎn)單工廠模式(Simple Factory)
- 結(jié)構(gòu)圖:客戶端 → 工廠類(根據(jù)參數(shù)創(chuàng)建產(chǎn)品) → 具體產(chǎn)品A/B
- 特點(diǎn):一個(gè)工廠類負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,通過(guò)傳入不同參數(shù)返回不同對(duì)象。
- 代碼示例:`java
public class ProductFactory {
public static Product createProduct(String type) {
if ("A".equals(type)) return new ConcreteProductA();
if ("B".equals(type)) return new ConcreteProductB();
throw new IllegalArgumentException("Unknown product type");
}
}`
- 優(yōu)缺點(diǎn):結(jié)構(gòu)簡(jiǎn)單,但違反開(kāi)閉原則(新增產(chǎn)品需修改工廠類)。
2. 工廠方法模式(Factory Method)
- 結(jié)構(gòu)圖:客戶端 → 抽象工廠(聲明創(chuàng)建方法) → 具體工廠A/B(各自創(chuàng)建對(duì)應(yīng)產(chǎn)品) → 具體產(chǎn)品A/B
- 特點(diǎn):每個(gè)產(chǎn)品對(duì)應(yīng)一個(gè)工廠類,符合開(kāi)閉原則。
- 代碼示例:`java
interface Factory {
Product createProduct();
}
class FactoryA implements Factory {
public Product createProduct() { return new ProductA(); }
}`
- 優(yōu)缺點(diǎn):擴(kuò)展性好,但類數(shù)量增多。
3. 抽象工廠模式(Abstract Factory)
- 結(jié)構(gòu)圖:客戶端 → 抽象工廠(聲明多個(gè)創(chuàng)建方法) → 具體工廠1/2(創(chuàng)建產(chǎn)品族) → 產(chǎn)品族A/B(包含多個(gè)關(guān)聯(lián)產(chǎn)品)
- 特點(diǎn):用于創(chuàng)建一系列相關(guān)或依賴的對(duì)象,強(qiáng)調(diào)產(chǎn)品族概念。
- 代碼示例:`java
interface AbstractFactory {
Report createReport();
Poster createPoster();
}
class PRFactory implements AbstractFactory {
public Report createReport() { return new PRReport(); }
public Poster createPoster() { return new PRPoster(); }
}`
- 優(yōu)缺點(diǎn):保證產(chǎn)品族一致性,但擴(kuò)展產(chǎn)品族困難。
三、小項(xiàng)目實(shí)戰(zhàn):公關(guān)服務(wù)系統(tǒng)設(shè)計(jì)
假設(shè)我們開(kāi)發(fā)一個(gè)公關(guān)服務(wù)系統(tǒng),需要生成不同類型的報(bào)告和宣傳材料。
1. 需求分析:
- 報(bào)告類型:輿情報(bào)告、活動(dòng)報(bào)告
- 宣傳材料:海報(bào)、新聞稿
- 客戶類型:企業(yè)客戶、政府客戶(不同客戶需要風(fēng)格一致的材料族)
2. 代碼實(shí)現(xiàn)(抽象工廠模式應(yīng)用):`java
// 抽象產(chǎn)品
interface Report { void generate(); }
interface Poster { void design(); }
// 具體產(chǎn)品
class EnterpriseReport implements Report {
public void generate() { System.out.println("生成企業(yè)版報(bào)告"); }
}
class GovernmentPoster implements Poster {
public void design() { System.out.println("設(shè)計(jì)政府風(fēng)格海報(bào)"); }
}
// 抽象工廠
interface PRFactory {
Report createReport();
Poster createPoster();
}
// 具體工廠
class EnterpriseFactory implements PRFactory {
public Report createReport() { return new EnterpriseReport(); }
public Poster createPoster() { return new EnterprisePoster(); }
}
// 客戶端使用
public class Client {
public static void main(String[] args) {
PRFactory factory = new EnterpriseFactory();
Report report = factory.createReport();
Poster poster = factory.createPoster();
report.generate();
poster.design();
}
}`
3. 項(xiàng)目策劃中的模式選擇:
- 初期產(chǎn)品單一:可使用簡(jiǎn)單工廠模式快速原型開(kāi)發(fā)
- 產(chǎn)品線擴(kuò)展:采用工廠方法模式便于新增產(chǎn)品類型
- 多套風(fēng)格系統(tǒng):抽象工廠模式確保企業(yè)/政府客戶材料的整體一致性
四、與最佳實(shí)踐
- 簡(jiǎn)單工廠適用于產(chǎn)品類型少、變化不大的場(chǎng)景
- 工廠方法是Spring框架中BeanFactory的思想基礎(chǔ),支持靈活擴(kuò)展
- 抽象工廠在UI主題切換、跨平臺(tái)產(chǎn)品族創(chuàng)建中優(yōu)勢(shì)明顯
- 在公關(guān)服務(wù)系統(tǒng)中:
- 利用工廠模式統(tǒng)一管理宣傳材料生成
- 通過(guò)配置化選擇工廠,輕松切換服務(wù)風(fēng)格
- 新增客戶類型時(shí)只需擴(kuò)展工廠類,不影響現(xiàn)有代碼
工廠模式不僅是代碼設(shè)計(jì)工具,更是項(xiàng)目策劃中的架構(gòu)思維。理解其精髓,能在復(fù)雜系統(tǒng)設(shè)計(jì)中游刃有余,提升代碼的可維護(hù)性和擴(kuò)展性。