設計模式 抽象工廠模式

2021-06-01 05:48:45 字數 1303 閱讀 8449

抽象工廠模式,在很多場景下都有應用。

它有以下的優點

1:封裝性,每個產品的實現類不是高層模組要關心的,它所要關心 的是介面和抽象類,他不關心物件是如何建立出來,只有工廠類去關心,只要知道工廠類是誰,我們就能得到乙個需要的物件。

2:產品家族的約束為非公開狀態。而抽象工廠模式針對的是多個產品等級結構。當每個抽象產品都有多於乙個的具體子類的時候,工廠角色怎麼知道例項化哪乙個子類呢?比如每個抽象產品角色都有兩個具體產品。抽象工廠模式提供兩個具體工廠角色,分別對應於這兩個具體產品角色,每乙個具體工廠角色只負責某乙個產品角色的例項化。每乙個具體工廠類只負責建立抽象產品的某乙個具體子類的例項。

//抽象產品  

public abstract class product

//具體產品類

// 產品a1

public class producta1 extends product

}

//產品a 2

public class producta2 extends product

}

//產品b1

public class productb1 extends product

}

public class productb2 extends product

} //抽象工廠類

public abstract class creater

//具體工廠類

public class creater1 extends creater

public product createproductb()

}

public class creater2 extends creater

public product createproductb()

} // 測試類

public class client

}

抽象工廠方法從縱向上看,幾乎沒有可擴充套件性,假如我們想增加乙個產品c,也就是說產品家族由原來的2個變為3個,程式將會有很大的變動,抽象工廠中就需要增加乙個方法。這嚴重違背了開閉原則。並且抽象類是不喜歡被修改的。

但是從橫向上來看,卻對擴充套件性有了很好的支援,如果我們增加乙個產品等級3,我們只需要在寫乙個create3就可以了,這裡又符合了開閉原則,有多少個產品等級就應該有多少個實現工廠類。每增加乙個產品等級就相應的增加乙個實現工廠類,這裡的擴充套件性又很自然的體現出來了。

所以每個模式都是必須在合適的地方使用的。

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

抽象工廠模式 常用設計模式 抽象工廠模式

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...

抽象工廠模式 設計模式(九) 抽象工廠模式

提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...