1.介紹:
?????工廠方法模式顧名思義就是創(chuàng)建產(chǎn)品的,這里的產(chǎn)品在Java程序里面就是一個個對象抒钱,該模式就是用于封裝對象的創(chuàng)建瞬欧,是一種創(chuàng)建型模式。根據(jù)抽象程度的不同晦鞋,它又分為:簡單工廠模式蹲缠、工廠方法模式和抽象工廠模式。
2.代碼實例:
2.1:簡單工廠方法模式:
?????簡單工廠模式其實不屬于設(shè)計模式中的一種悠垛,他是把對象創(chuàng)建的一個簡單封裝线定,根據(jù)傳遞的參數(shù)創(chuàng)建不同的對象。
- 工廠生產(chǎn)的對象產(chǎn)品抽象
public interface Phone {
void show();
}
- 具體產(chǎn)品
public class IPhone implements Phone {
public IPhone() {
this.show();
}
@Override
public void show() {
System.out.println("make apple phone");
}
}
public class MiPhone implements Phone {
public MiPhone() {
this.show();
}
@Override
public void show() {
System.out.println("make mi phone");
}
}
- 生產(chǎn)手機的簡單工廠
public class SimpleFactory {
//生產(chǎn)手機產(chǎn)品的靜態(tài)方法
public static Phone createPhone(String type) {
if (type.equalsIgnoreCase("MiPhone")) {
return new MiPhone();
} else {
return new IPhone();
}
}
}
- 客戶端使用簡單工廠方法
public class Client {
public static void main(String[] args) {
Phone miPhone = SimpleFactory.createPhone("MiPhone");
Phone iphone = SimpleFactory.createPhone("Iphone");
System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
System.out.println("iphone type " + iphone.getClass().getSimpleName());
}
}
//控制臺輸出:
make mi phone
make apple phone
miPhone type MiPhone
iphone type IPhone
-
簡單工廠方法UML類圖展示:
簡單工廠方法類圖.png
2.2:工廠方法模式:
?????工廠方法模式是在簡單工廠方法模式之上進行了一層抽象确买,把對象創(chuàng)建的方法抽象成一個接口斤讥,每一個具體的產(chǎn)品由一個具體的工廠來產(chǎn)生。
- AbstractFactory類
public interface AbstractFactory {
Phone createPhone();
}
- MiPhonoeFactory類湾趾,生產(chǎn)MiPhone對象
public class MiPhoneFactory implements AbstractFactory {
@Override
public Phone createPhone() {
return new MiPhone();
}
}
- IPhoneFactory類芭商,生產(chǎn)IPhone對象
public class IPhoneFactory implements AbstractFactory {
@Override
public Phone createPhone() {
return new IPhone();
}
}
- Client客戶端的使用
public class Client {
public static void main(String[] args) {
// Phone miPhone = SimpleFactory.createPhone("MiPhone");
// Phone iphone = SimpleFactory.createPhone("Iphone");
// System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
// System.out.println("iphone type " + iphone.getClass().getSimpleName());
AbstractFactory miPhoneFactory = new MiPhoneFactory();
AbstractFactory iphoneFactory = new IPhoneFactory();
Phone miPhone = miPhoneFactory.createPhone();
Phone iphone = iphoneFactory.createPhone();
System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
System.out.println("iphone type " + iphone.getClass().getSimpleName());
}
//控制臺輸出:
make mi phone
make apple phone
miPhone type MiPhone
iphone type IPhone
-
工廠方法模式UML類圖展示:
工廠方法模式UML類圖.png
2.3抽象工廠方法模式:
?????抽象工廠方法模式是在工廠方法模式之上再進行抽象的,抽象工廠不再是像工廠方法模式那樣只生成一個產(chǎn)品搀缠,抽象工廠方法模式是生成一系列的配套產(chǎn)品铛楣。抽象工廠就類似小米這個品牌,它能夠生成電腦艺普、手機和手環(huán)等一系列配套的產(chǎn)品簸州。
- AbFactory類
public interface AbFactory {
Phone createPhone();
PC createPC();
}
- PC產(chǎn)品
public interface PC {
void show();
}
public class MiPC implements PC {
public MiPC() {
this.show();
}
@Override
public void show() {
System.out.println("make mi pc");
}
}
public class MacPC implements PC {
public MacPC() {
this.show();
}
@Override
public void show() {
System.out.println("make mac pc");
}
}
- MiFactory
public class MiFactory implements AbFactory {
@Override
public Phone createPhone() {
return new MiPhone();
}
@Override
public PC createPC() {
return new MiPC();
}
}
- AppleFactory
public class AppleFactory implements AbFactory {
@Override
public Phone createPhone() {
return new IPhone();
}
@Override
public PC createPC() {
return new MacPC();
}
}
- Client客戶端使用類
public class Client {
public static void main(String[] args) {
// Phone miPhone = SimpleFactory.createPhone("MiPhone");
// Phone iphone = SimpleFactory.createPhone("Iphone");
// System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
// System.out.println("iphone type " + iphone.getClass().getSimpleName());
// AbstractFactory miPhoneFactory = new MiPhoneFactory();
// AbstractFactory iphoneFactory = new IPhoneFactory();
// Phone miPhone = miPhoneFactory.createPhone();
// Phone iphone = iphoneFactory.createPhone();
// System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
// System.out.println("iphone type " + iphone.getClass().getSimpleName());
AbFactory miAbstractFactory = new MiFactory();
AbFactory appleAbstractFactory = new AppleFactory();
Phone miPhone = miAbstractFactory.createPhone();
PC miPC = miAbstractFactory.createPC();
Phone iphone = appleAbstractFactory.createPhone();
PC macPC = appleAbstractFactory.createPC();
System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
System.out.println("miPC type " + miPC.getClass().getSimpleName());
System.out.println("iphone type " + iphone.getClass().getSimpleName());
System.out.println("macPC type " + macPC.getClass().getSimpleName());
}
}
-
抽象工廠模式UML類圖:
抽象工廠模式.png
3.使用場景:
?????簡單工廠模式就是一個很簡單的對對象創(chuàng)建的封裝鉴竭,工廠方法模式是對每一個具體產(chǎn)品創(chuàng)建的封裝,每一個產(chǎn)品對應(yīng)有一個具體的工廠來創(chuàng)建岸浑,而抽象工廠模式是針對一系列產(chǎn)品對象的創(chuàng)建搏存。3種工廠模式是在抽象層度上的不同,對于不同場景選擇不同的工廠模式進行對象創(chuàng)建的封裝矢洲。
3.1: 工廠方法模式的使用:
?????在Java中就有工廠方法模式的使用:線程工廠的封裝就是用來創(chuàng)建線程池璧眠,具體的線程創(chuàng)建交給具體的工廠實現(xiàn)。
public interface ThreadFactory {
Thread newThread(Runnable r);
}