抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠建立其餘工廠。該超級工廠又稱爲其餘工廠的工廠。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。java
在抽象工廠模式中,接口是負責建立一個相關對象的工廠,不須要顯式指定它們的類。每一個生成的工廠都能按照工廠模式提供對象。設計模式
抽象工廠稍微有些複雜,可是使用場景卻很單一:若是你有一族對象,緯度大於一,那麼能夠考慮使用抽象工廠來建立對象。this
舉個例子來講明什麼是緯度大於一:spa
因此說,在有緯度大於一的一族對象時,能夠考慮使用抽象工廠模式。設計
下面來看看怎麼用Java實現抽象工廠模式。code
抽象工廠如何解決這種複雜對象的建立?我是這麼理解的:對象
下面就以汽車的例子爲例,看看如何實現:blog
代碼以下:接口
// 對象族定義 public class Audi { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } public class AudiSRV extends Audi { } public class AudiSUV extends Audi { } public class Benz { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } public class BenzSRV extends Benz { } public class BenzSUV extends Benz { } // 工廠定義 // 工廠數量等於 汽車類型的數量 // 工廠內的方法數量等於 汽車品牌的數量 // SRV工廠能夠生產奔馳的SRV和奧迪的SRV // SUV工廠能夠生產奔馳的SUV和奧迪的SUV public interface VehicleFactory { Audi createAudi(); Benz createBenz(); } public class SRVFactory implements VehicleFactory { public Audi createAudi() { Audi audi = new AudiSRV(); audi.setName("AudiSRV"); return audi; } public Benz createBenz() { Benz benz = new BenzSRV(); benz.setName("BenzSRV"); return benz; } } public class SUVFactory implements VehicleFactory { public Audi createAudi() { Audi audi = new AudiSUV(); audi.setName("AudiSUV"); return audi; } public Benz createBenz() { Benz benz = new BenzSUV(); benz.setName("BenzSUV"); return benz; } }
根據套路,工廠數量等於 汽車類型的數量,工廠內的方法數量等於 汽車品牌的數量。因此,SRV工廠能夠生產奔馳的SRV和奧迪的SRV,SUV工廠能夠生產奔馳的SUV和奧迪的SUV。路由
也能夠反過來,定義SUV類型的兩種車輛和SRV類型的兩種車輛,那麼工廠就變換爲Benz工廠(生產奔馳SUV和SRV),Audi工廠(生產奧迪SUV和SRV),這樣可能更合理,可是要從具體業務場景來區分。抽象工廠的類型很靈活。
抽象工廠模式,能夠在理解需求方面須要慢慢琢磨,可是使用場景很單一,代碼實現也很簡單。它有以下優勢:
以上就是我對抽象工廠模式的一些理解,有不足之處請你們指出,謝謝。