抽象工廠提供了一種方式,可以將一組具有同一主題的單獨工廠封裝起來。如果比較抽象工廠和工廠模式,不難發現前者只是在工廠模式之上增加了一層抽象的概念。抽象工廠是一個父類工廠,可以創建其他工廠。
簡單的說就是"工廠的工廠"
下面簡單舉一個例子
舉一個學習的例子,裏面有書本,筆,教室
其中教室是一個工廠
//一本抽象書
interface Book{
public String bookName();
}
//一支抽象筆
interface Pen{
public String penName();
}
//一間抽象教室
interface ClassFactory{
public Book getBookname();
public Pen getPenname();
}
//我在看這本java書
class JavaBook implements Book{
@Override
public String bookName() {
return "JavaBook";
}
}
//我在用這個品牌的筆
class Hero implements Pen{
@Override
public String penName() {
return "Hero";
}
}
//我在這間教室裏面學習
class ClassRealFactory implements ClassFactory{
@Override
public Book getBookname() { //是這本書呀
return new JavaBook();
}
@Override
public Pen getPenname() { //是這支筆呀
return new Hero();
}
}
public class CXgongchang { //抽象工廠
public void study(ClassRealFactory cf){ //開始學習....在這間真實的教室裏面
System.out.println("I am reading "+cf.getBookname().bookName()+" and writing with a "+cf.getPenname().penName()+" Pen.");
}
public static void main(String[] args){
ClassRealFactory cf = new ClassRealFactory(); //教室對象
CXgongchang cx = new CXgongchang(); //主類對象
cx.study(cf); //調用學習的方法
}
}
運行效果