是一種為訪問類提供一個創(chuàng)建一組相關或相互依賴對象的接口羞酗,且訪問類無需指定所要產(chǎn)品的具體類就能得到同族的不同等級的產(chǎn)品的模式結構腐宋。
工廠模式只能生產(chǎn)一個等級的產(chǎn)品,抽象工廠模式可以生產(chǎn)多個等級的產(chǎn)品檀轨。
應用場景:
1. 系統(tǒng)中有多個產(chǎn)品族胸竞,每個具體工廠創(chuàng)建同族不同級的產(chǎn)品
2. 系統(tǒng)一次只可消費某一族產(chǎn)品,即同族的產(chǎn)品一起使用
優(yōu)點:
1. 可以在類的內部對產(chǎn)品族中相關聯(lián)的多等級產(chǎn)品共同管理参萄,而不必專門引入多個新的類進行管理
2. 當需要產(chǎn)品族的時候卫枝,抽象工廠可以保證客戶端始終只使用同一個產(chǎn)品的產(chǎn)品族
3. 抽象工廠增強了可拓展性,新增產(chǎn)品族的時候不需要修改源代碼讹挎,滿足開閉原則
模式結構:
1. 抽象工廠(Abstract Factory):提供了創(chuàng)建產(chǎn)品的接口校赤,包含多個創(chuàng)建產(chǎn)品的方法,可以創(chuàng)建多個不同等級的產(chǎn)品筒溃。
2. 具體工廠(Concrete Factory):實現(xiàn)抽象工廠中的方法马篮,完成具體產(chǎn)品創(chuàng)建
3. 抽象產(chǎn)品(Product):定義產(chǎn)品規(guī)范,抽象工廠模式有多個抽象產(chǎn)品
4. 具體產(chǎn)品(ConcreteProduct):實現(xiàn)抽象產(chǎn)品接口怜奖,由具體工廠來創(chuàng)建浑测,與工廠是一對多關系
實現(xiàn):
package AbstractFactory;
/**
* @Author: KenChen
* @Description: 抽象工廠模式示例
* @Date: Create in 2022/5/13 11:42
*/
public class AbstractFactory2 {
public static void main(String[] args) {
ConcreteFactory1 factory1 = new ConcreteFactory1();
Product product1 = factory1.makeProduct1();
Product product2 = factory1.makeProduct2();
}
//抽象工廠
interface AbstractFactory {
TestProduct1 makeProduct1();
TestProduct2 makeProduct2();
}
// 具體工廠
static class ConcreteFactory1 implements AbstractFactory {
@Override
public TestProduct1 makeProduct1() {
System.out.println("具體工廠1生產(chǎn) 產(chǎn)品1");
return new TestProduct1();
}
@Override
public TestProduct2 makeProduct2() {
System.out.println("具體工廠1生產(chǎn) 產(chǎn)品2");
return new TestProduct2();
}
}
// 抽象產(chǎn)品
interface Product {
void show();
}
// 具體產(chǎn)品
static class TestProduct1 implements Product {
@Override
public void show() {
System.out.println("具體產(chǎn)品1");
}
}
static class TestProduct2 implements Product {
@Override
public void show() {
System.out.println("具體產(chǎn)品2");
}
}
}