1. 寫在前面
上一節中,我們學習了工廠模式,學習了工廠模式中實際上是通過 工廠實現類去創建具體的產品實現對象,從而達到 將產品類 的實現下放到子類(工廠實現類而不是工廠類)中去完成,充分將產品的定義、實現、實例化 三者分開。
這樣如果有新的產品到來的時候,只需要添加對應的 工廠實現類、產品實現類即可。不用修改其他已有的邏輯。
2. 抽象工廠
個人看來,這一節講的 抽象工廠
和上一節講的 工廠模式
之間沒有任何區別(沒錯,是一點區別都沒有)。
直接看代碼
這里的代碼例子和上一節中可以說是一毛一樣,唯一不同的是,產品從一個變成了多個。
因此,工廠要生成對應的多個產品。供應商提供一系列產品
首先是有兩個抽象產品
// Html 文檔 產品接口
public Interface HtmlDocument{
public void save();
}
// Word 文檔 產品接口
public Interface WordDocument{
public void save();
}
以及對應的產品實現類
// Html 文檔 產品實現類
public class FastHtml Implements HtmlDocument{
public void save(){
sout("saving Html Document...")
}
}
// Word 文檔 產品實現類
public class FastWord Implements HtmlDocument{
public void save(){
sout("saving Html Document...")
}
}
對應的有一個 抽象工廠類
(其實就是工廠類,不過生成多個產品)
public AbstractFactory{
// 兩個生成方法
public HtmlDocument createHtml();
public WordDocument createWord();
}
然后是工廠實現類
public FastFactory Implements AbstractFactory{
public HtmlDocument createHtml(){
retrun new FastHtml();
}
public WordDocument createWord(){
retrun new FastWord();
}
}
下面就是使用了
// 事實上這里寫 FastFactory factory = ... 也是可以的
AbstractFactory factory = new FastFactory();
FastHtml = factory.createHtml();
Fastword = factory.createWord();
// 后面就是對象的使用了
...
如果這里需要其他的一類產品實現,比如 GoodHtml
& GoodWord
的實現,直接加上產品的實現,以及對應的 GoodFactory
即可。
3. 總結
與上一節的一模一樣