天天看點

設計模式四: 抽象工廠(Abstract Factory)

簡介

抽象工廠模式是建立型模式的一種, 與工廠方法不同的是抽象工廠針對的是生産一組相關的産品, 即一個産品族.

抽象工廠使用工廠方法模式來生産單一産品, 單一産品的具體實作分别屬于不同的産品族. 抽象工廠即是對産品族的抽象.

工廠類一般使用單例實作(工廠方法的工廠類也是如此)

意圖

定義了一個建立對象的接口,用于建立一組相關的對象.

類圖

設計模式四: 抽象工廠(Abstract Factory)

實作

組裝電腦需要CPU和記憶體, 對于Windows和Mac來說所需的是兩個不同的系列産品, Windows用Windows系列的CPU,RAM, Mac用Mac系列的CPU,RAM;

  1. 使用工廠模式,分别定義CPU,RAM相關的接口和實作
// 抽象産品,定義接口
public interface CPU {
}
public interface RAM {
}

// 抽象每個産品的工廠
public interface CPUFactory {
    CPU createCPU();
}
public interface RAMFactory {
    RAM createRAM();
}

// 實作具體産品
public class MacCPU implements CPU {
}
public class MacRAM implements RAM {
}
public class WindowsCPU implements CPU {
}
public class WindowsRAM implements RAM {
}

// 工廠方法具體實作
public class MacCPUFactory implements CPUFactory {
    public CPU createCPU() {
        return new MacCPU();
    }
}
public class MacRAMFactory implements RAMFactory {
    public RAM createRAM() {
        return new MacRAM();
    }
}
public class WindowsCPUFactory implements CPUFactory {
    public CPU createCPU() {
        return new WindowsCPU();
    }
}
public class WindowsRAMFactory implements RAMFactory {
    public RAM createRAM() {
        return new WindowsRAM();
    }
}           
  1. 定義抽象工廠接口
/**
 * 抽象工廠接口
 */
public interface PCAbstractFactory {
    CPU createCPU();
    RAM createRAM();
}           
  1. 定義抽象工廠的實作
/**
 * Mac的工廠實作
 */
public class MacFactory implements PCAbstractFactory{
    public CPU createCPU() {
        return new MacCPUFactory().createCPU();
    }

    public RAM createRAM() {
        return new MacRAMFactory().createRAM();
    }
}

/**
 * Windows的工廠實作
 */
public class WindowsFactory implements PCAbstractFactory{
    public CPU createCPU() {
        return new WindowsCPUFactory().createCPU();
    }

    public RAM createRAM() {
        return new WindowsRAMFactory().createRAM();
    }
}           
  1. 調用
PCAbstractFactory factory = new MacFactory();
CPU cpu = factory.createCPU();
RAM ram = factory.createRAM();           

總結

優點: 1. 将産品的生産分離出來; 2. 易于改變産品系列; 3. 利于産品一緻性,一次生産一系列産品

缺點: 不利于新增産品,新增則抽象工廠及工廠實作類均要增加相關對象方法

繼續閱讀