Java23種設(shè)計模式--工廠方法模式
一踊跟、什么是工廠方法模式
- 工廠方法模式同樣屬于類的創(chuàng)建型模式又被稱為多態(tài)工廠模式踩验。工廠方法模式的意義是定義一個創(chuàng)建產(chǎn)品對象的工廠接口鸥诽,將實(shí)現(xiàn)創(chuàng)建工作推遲到子類當(dāng)中。核心工廠類不再負(fù)責(zé)產(chǎn)品的創(chuàng)建箕憾,這樣核心類成為一個抽象工廠角色牡借,僅負(fù)責(zé)具體工廠子類必須實(shí)現(xiàn)的接口,這樣進(jìn)一步抽象化的好處是使得工廠方法模式可以使系統(tǒng)在不修改具體工廠角色的情況下引進(jìn)新的產(chǎn)品袭异。
二钠龙、模式中包含的角色及其職責(zé)
1. 抽象工廠(Creator)角色
工廠方法模式的核心,任何工廠類都必須實(shí)現(xiàn)這個接口御铃。
2. 具體工廠( Concrete Creator)角色
具體工廠類是抽象工廠的一個實(shí)現(xiàn)碴里,負(fù)責(zé)實(shí)例化產(chǎn)品對象。
3. 抽象(Product)角色
工廠方法模式所創(chuàng)建的所有對象的父類上真,它負(fù)責(zé)描述所有實(shí)例所共有的公共接口咬腋。
4. 具體產(chǎn)品(Concrete Product)角色
工廠方法模式所創(chuàng)建的具體實(shí)例對象
三、Demo
抽象工廠(Creator)角色
package com.stark.model;
public interface FruitFactory {
public Fruit getFruit();
}
具體工廠( Concrete Creator)角色
package com.stark.model;
public class AppleFactory implements FruitFactory {
@Override
public Fruit getFruit() {
return new Apple();
}
}
抽象(Product)角色
package com.stark.model;
public interface Fruit {
void get();
}
具體產(chǎn)品(Concrete Product)角色
package com.stark.model;
public class Apple implements Fruit{
@Override
public void get() {
System.out.println("采集蘋果...");
}
}
四睡互、工廠方法模式和簡單工廠模式比較
工廠方法模式與簡單工廠模式在結(jié)構(gòu)上的不同不是很明顯根竿。工廠方
法類的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具
體類上就珠。工廠方法模式之所以有一個別名叫多態(tài)性工廠模式是因?yàn)榫唧w工
廠類都有共同的接口寇壳,或者有共同的抽象父類。當(dāng)系統(tǒng)擴(kuò)展需要添加新的產(chǎn)品對象時妻怎,僅僅需要添加一個具體對
象以及一個具體工廠對象九巡,原有工廠對象不需要進(jìn)行任何修改,也
不需要修改客戶端蹂季,很好的符合了“開放-封閉”原則。而簡單工廠
模式在添加新產(chǎn)品對象后不得不修改工廠方法疏日,擴(kuò)展性不好偿洁。