意圖
提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定他們具體的類。
結(jié)構(gòu)
其中:文章來源:http://www.zghlxwxcb.cn/news/detail-847384.html
- AbstractFactory聲明一個創(chuàng)建抽象產(chǎn)品對象的操作接口。
- ConcreteFactory實現(xiàn)創(chuàng)建具體產(chǎn)品對象的操作。
- AbstractProduct為一類產(chǎn)品對象聲明一個接口。
- ConcreteProduct定義一個將被相應(yīng)的具體工廠創(chuàng)建的產(chǎn)品對象,實現(xiàn)AbstractProduct接口。
- Client僅使用由AbstractFactory和AbstractProduct類聲明的接口。
適用性
Abstract Factory模式使用于:文章來源地址http://www.zghlxwxcb.cn/news/detail-847384.html
- 一個系統(tǒng)要獨立于他的產(chǎn)品的創(chuàng)建、組合和表達時。
- 一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。
- 當(dāng)要強調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計以便進行聯(lián)合使用時。
- 當(dāng)要強調(diào)一個產(chǎn)品類庫,只想顯示他們的接口而不是實現(xiàn)時。
代碼示例
//產(chǎn)品抽象類
abstract class Product {
public abstract void doSomething();
}
//具體產(chǎn)品A
class ConcreteProductA extends Product {
@Override
public void doSomething() {
System.out.println("Doing something with ConcreteProductA...");
}
}
//具體產(chǎn)品B
class ConcreteProductB extends Product {
@Override
public void doSomething() {
System.out.println("Doing something with ConcreteProductB...");
}
}
//工廠抽象類
abstract class AbstractFactory {
public abstract Product newProductA();
public abstract Product newProductB();
}
//具體工廠A
class ConcreteFactoryA extends AbstractFactory {
@Override
public Product newProductA() {
return new ConcreteProductA();
}
@Override
public Product newProductB() {
return new ConcreteProductB();
}
}
//具體工廠B
class ConcreteFactoryB extends AbstractFactory {
@Override
public Product newProductA() {
return new ConcreteProductA(); //返回不同的具體產(chǎn)品
}
@Override
public Product newProductB() {
return new ConcreteProductB(); //返回不同的具體產(chǎn)品
}
}
public class Client {
public static void main(String[] args) {
AbstractFactory factory = new ConcreteFactoryA();
Product p1 = factory.newProductA();
Product p2 = factory.newProductB();
p1.doSomething();
p2.doSomething();
}
}
到了這里,關(guān)于Abstract Factory 抽象工廠的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!