抽象工廠模式
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.爲創建一組相關或相互依賴的對象提供一個接口,而且無需制定它們的具體類。
抽象工廠模式的類圖
代碼參考
/**
* 抽象產品A
*/
public abstract class AbstractProductA{
public abstract void method();
}
/**
* 抽象產品B
*/
public abstract class AbstractProductB{
public abstract void method();
}
/**
* 具體產品A1
*/
public class ConcreteProductA1 extends AbstractProductA{
@Override
public void method() {
System.out.println(getClass().getSimpleName()+".method");
}
}
/**
* 具體產品A2
*/
public class ConcreteProductA2 extends AbstractProductA{
@Override
public void method() {
System.out.println(getClass().getSimpleName()+".method");
}
}
/**
* 具體產品B1
*/
public class ConcreteProductB1 extends AbstractProductB{
@Override
public void method() {
System.out.println(getClass().getSimpleName()+".method");
}
}
/**
* 具體產品B2
*/
public class ConcreteProductB2 extends AbstractProductB{
@Override
public void method() {
System.out.println(getClass().getSimpleName()+".method");
}
}
/**
* 抽象工廠
*/
public abstract class AbstractFactory{
public abstract AbstractProductA createProductA();
public abstract AbstractProductB createProductB();
}
/**
* 具體的工廠1
*/
public class ConcreteFactory1 extends AbstractFactory{
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB1();
}
}
/**
* 具體的工廠2
*/
public class ConcreteFactory2 extends AbstractFactory{
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB2();
}
}
public static void main(String[] args){
AbstractFactory factory1 = new ConcreteFactory1();
factory1.createProductA().method();
factory1.createProductB().method();
AbstractFactory factory2 = new ConcreteFactory2();
factory2.createProductA().method();
factory2.createProductB().method();
}
抽象工廠的角色
- AbstractProduct: 抽象的產品,一般有固定多個。
- ConcreteProduct: 產品的實現。
- AbstractFactory: 抽象工廠,定義一組創建產品的方法,每個方法對應創建一箇中產品。
- ConcreteFactory:具體的實現,創建具體的產品對象
抽象工廠的特點
- 優點就是分離接口和實現。
- 缺點是就是創建的類比較大,擴充產品的時候比較困難。
參考
- 《設計模式之禪》
- 《Android源碼設計模式解析實戰》