太原營銷網(wǎng)站建設(shè)制作平臺(tái)網(wǎng)站監(jiān)測(cè)
什么是工廠模式
工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。
工廠模式提供了一種將對(duì)象的實(shí)例化過程封裝在工廠類中的方式。通過使用工廠模式,可以將對(duì)象的創(chuàng)建與使用代碼分離,提供一種統(tǒng)一的接口來創(chuàng)建不同類型的對(duì)象。
在工廠模式中,我們?cè)趧?chuàng)建對(duì)象時(shí)不會(huì)對(duì)客戶端暴露創(chuàng)建邏輯,并且是通過使用一個(gè)共同的接口來指向新創(chuàng)建的對(duì)象。
工廠模式解決什么問題
通過定義一個(gè)創(chuàng)建對(duì)象的接口,讓其子類自己決定實(shí)例化哪一個(gè)工廠類,工廠模式使其創(chuàng)建過程延遲到子類進(jìn)行。
主要解決接口選擇的問題。
優(yōu)點(diǎn)
1、一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象,只要知道其名稱就可以了。
2、擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠類就可以。
3、屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。
缺點(diǎn)
每次增加一個(gè)產(chǎn)品時(shí),都需要增加一個(gè)具體類和對(duì)象實(shí)現(xiàn)工廠,使得系統(tǒng)中類的個(gè)數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時(shí)也增加了系統(tǒng)具體類的依賴。這并不是什么好事。
工廠模式包含以下幾個(gè)核心角色
- 抽象產(chǎn)品(Abstract Product):定義了產(chǎn)品的共同接口或抽象類。它可以是具體產(chǎn)品類的父類或接口,規(guī)定了產(chǎn)品對(duì)象的共同方法。
- 具體產(chǎn)品(Concrete Product):實(shí)現(xiàn)了抽象產(chǎn)品接口,定義了具體產(chǎn)品的特定行為和屬性。
- 抽象工廠(Abstract Factory):聲明了創(chuàng)建產(chǎn)品的抽象方法,可以是接口或抽象類。它可以有多個(gè)方法用于創(chuàng)建不同類型的產(chǎn)品。
- 具體工廠(Concrete Factory):實(shí)現(xiàn)了抽象工廠接口,負(fù)責(zé)實(shí)際創(chuàng)建具體產(chǎn)品的對(duì)象。
示例
創(chuàng)建一個(gè)接口
public interface Fruit {void name();
}
創(chuàng)建實(shí)現(xiàn)接口的實(shí)體類
public class Apple implements Fruit{@Overridepublic void name(){System.out.println("我是蘋果");}
}
public class Orange implements Fruit{@Overridepublic void name() {System.out.println("我是橘子");}
}
創(chuàng)建一個(gè)工廠,生成基于給定信息的實(shí)體類的對(duì)象
public class FruitFactor {public static Fruit getFruit(String fruit){if (fruit.equals("蘋果")){return new Apple();}else if (fruit.equals("橘子")){return new Orange();}else {return null;}}
}
使用該工廠,通過傳遞類型信息來獲取實(shí)體類的對(duì)象
public class Consumer {public static void main(String[] args) {FruitFactor fruitFactor = new FruitFactor();Fruit fruit1 = fruitFactor.getFruit("蘋果");fruit1.name();Fruit fruit2 = fruitFactor.getFruit("橘子");fruit2.name();}
}