抽象工廠模式
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.為創(chuàng)建一組相關(guān)或相互依賴的對象提供一個接口淮阐,而且無需制定它們的具體類岭辣。
抽象工廠模式的類圖
代碼參考
/**
* 抽象產(chǎn)品A
*/
public abstract class AbstractProductA{
public abstract void method();
}
/**
* 抽象產(chǎn)品B
*/
public abstract class AbstractProductB{
public abstract void method();
}
/**
* 具體產(chǎn)品A1
*/
public class ConcreteProductA1 extends AbstractProductA{
@Override
public void method() {
System.out.println(getClass().getSimpleName()+".method");
}
}
/**
* 具體產(chǎn)品A2
*/
public class ConcreteProductA2 extends AbstractProductA{
@Override
public void method() {
System.out.println(getClass().getSimpleName()+".method");
}
}
/**
* 具體產(chǎn)品B1
*/
public class ConcreteProductB1 extends AbstractProductB{
@Override
public void method() {
System.out.println(getClass().getSimpleName()+".method");
}
}
/**
* 具體產(chǎn)品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: 抽象的產(chǎn)品,一般有固定多個执泰。
- ConcreteProduct: 產(chǎn)品的實現(xiàn)奕坟。
- AbstractFactory: 抽象工廠卖鲤,定義一組創(chuàng)建產(chǎn)品的方法倾剿,每個方法對應(yīng)創(chuàng)建一個中產(chǎn)品窜锯。
- ConcreteFactory:具體的實現(xiàn),創(chuàng)建具體的產(chǎn)品對象
抽象工廠的特點
- 優(yōu)點就是分離接口和實現(xiàn)管宵。
- 缺點是就是創(chuàng)建的類比較大截珍,擴充產(chǎn)品的時候比較困難攀甚。
參考
- 《設(shè)計模式之禪》
- 《Android源碼設(shè)計模式解析實戰(zhàn)》