抽象工廠(Abstract Factory)模式——Java設計模式(三)
阿新 • • 發佈:2019-02-18
抽象工廠模式簡介
抽象工廠模式(Abstract Factory Pattern):圍繞一個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。
分類:建立型模式。
在抽象工廠模式中,介面是負責建立一個相關物件的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供物件。
意圖:提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
主要解決:主要解決介面選擇的問題。
何時使用:系統的產品有多於一個的產品族,而系統只消費其中某一族的產品。
如何解決:在一個產品族裡面,定義多個產品。
角色結構
抽象產品類:各種產品的抽象介面或抽象類;
具體產品類: 抽象產品介面(抽象類)的實現類;
抽象工廠類:核心,定義用於生成抽象產品的介面;
具體工廠類:繼承抽象工廠類,生成一組具體產品(注意是一組,這很重要)。
具體實現
步驟一:建立抽象產品類。
/**
* 水果類介面
* @author Administrator
*
*/
public interface IFruit {
void printName();
}
/**
* 蔬類菜介面
* @author Administrator
*
*/
public interface IVeggie {
void printName();
}
步驟二:建立具體產品類。
/**
* 北方水果。水果類介面的實現類
* @author Administrator
*
*/
public class NorthernFruit implements IFruit {
private String name;
public NorthernFruit(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void printName() {
System.out.println(this .name);
}
}
/**
* 南方水果。水果類介面的實現類
* @author Administrator
*
*/
public class SouthernFruit implements IFruit {
private String name;
public SouthernFruit(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void printName() {
System.out.println(this.name);
}
}
/**
* 北方蔬菜。蔬菜類介面的實現類
* @author Administrator
*
*/
public class NorthernVeggie implements IVeggie {
private String name;
public NorthernVeggie(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void printName() {
System.out.println(this.name);
}
}
/**
* 南方蔬菜。蔬菜類介面的實現類
* @author Administrator
*
*/
public class SouthernVeggie implements IVeggie {
private String name;
public SouthernVeggie(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void printName() {
System.out.println(this.name);
}
}
步驟三:建立抽象工廠類。
/**
* 抽象工廠類。有兩個具體的工廠,北方工廠和南方工廠
* @author Administrator
*
*/
public interface IAbstractFactory {
public IFruit createFruit(String name);
public IVeggie createVeggie(String name);
}
步驟四:建立具體工廠類。
/**
* 北方工廠。抽象工廠的實現類
* @author Administrator
*
*/
public class NorthernFactory implements IAbstractFactory {
@Override
public IFruit createFruit(String name) {
return new NorthernFruit(name);
}
@Override
public IVeggie createVeggie(String name) {
return new NorthernVeggie(name);
}
}
/**
* 南方工廠。抽象工廠的實現類
* @author Administrator
*
*/
public class SouthernFactory implements IAbstractFactory {
@Override
public IFruit createFruit(String name) {
return new SouthernFruit(name);
}
@Override
public IVeggie createVeggie(String name) {
return new SouthernVeggie(name);
}
}
步驟五:測試。
public class Main {
public static void main(String[] args) {
IAbstractFactory northernFactory = new NorthernFactory();
IFruit fruit1 = northernFactory.createFruit("水果1");
IVeggie veggie1 = northernFactory.createVeggie("蔬菜1");
fruit1.printName();
veggie1.printName();
IAbstractFactory southernFactory = new SouthernFactory();
IFruit fruit2 = southernFactory.createFruit("水果2");
IVeggie veggie2 = southernFactory.createVeggie("蔬菜2");
fruit2.printName();
veggie2.printName();
}
}
步驟六:驗證輸出。
水果1
蔬菜1
水果2
蔬菜2