簡單工廠模式(****** factory)是類的建立模式,又叫靜態工廠方法(static factory method)模式。
簡單工廠模式就是由乙個工廠類根據傳入的引數決定建立哪一種的產品類。
有4個角色
工廠類角色:是具體產品類角色直接呼叫者。
抽象產品角色:介面或抽象類,負責具體產品角色的定義,及與客戶端的互動。
具體產品角色:被工廠類建立的物件,也是客戶端實際操作物件。
客戶端:呼叫工廠類產生例項,並呼叫例項的方法進行相應工作。
public inte***ce people
public class chinese implements people
}public class american implements people
}public class peoplefactoryelse if(type==2)
}}
public class test
}
工廠方法模式是簡單工廠模式的衍生,解決了許多簡單工廠模式的問題。
首先完全實現『開-閉 原則』,實現了可擴充套件。其次更複雜的層次結構,可以應用於產品結果複雜的場合。
工廠方法模式的對簡單工廠模式進行了抽象。有乙個抽象的factory類(可以是抽象類和介面),這個類將不在負責具體的產品生產,而是只制定一些規範,具體的生產工作由其子類去完成。在這個模式中,工廠類和產品類往往可以依次對應。即乙個抽象工廠對應乙個抽象產品,乙個具體工廠對應乙個具體產品,這個具體的工廠就負責生產對應的產品。
工廠方法模式(factory method pattern)是最典型的模板方法模式(templete method pattern)應用。
如圖:基於面向介面程式設計的原理,建立部分成為抽象工廠與實體工廠,建立出的物件成為抽象產品與實體產品。你可能知道為什麼它能解決上面的問題了:多了乙個新物件,只需新增一套對應的工廠和產品就可以了,不需要修改原**,或只需進行少量的修改。
具體:實體工廠實現抽象工廠,實體產品實現抽象產品;抽象工廠生產抽象產品,實體工廠生產實體產品;實體工廠a生產實體產品a,實體工廠b生產實體產品b。
public inte***ce icar
public class bwm implements icar
}public class buick implements icar
}public inte***ce ica***ctory
public class bmwfactory implements ica***ctory
} public class buickfactory implements ica***ctory
} public class test
}
抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。
抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。根據lsp原則,任何接受父型別的地方,都應當能夠接受子型別。因此,實際上系統所需要的,僅僅是型別與這些抽象產品角色相同的一些例項,而不是這些抽象產品的例項。換言之,也就是這些抽象產品的具體子類的例項。工廠類負責建立抽象產品的具體子類的例項。
簡介當每個抽象產品都有多於乙個的具體子類的時候,工廠角色怎麼知道例項化哪乙個子類呢?比如每個抽象產品角色都有兩個具體產品。抽象工廠模式提供兩個具體工廠角色,分別對應於這兩個具體產品角色,每乙個具體工廠角色只負責某乙個產品角色的例項化。每乙個具體工廠類只負責建立抽象產品的某乙個具體子類的例項。
每乙個模式都是針對一定問題的解決方案,工廠方法模式針對的是乙個產品等級結構;而抽象工廠模式針對的是多個產品等級結果
設計模式 設計模式之工廠模式
工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...
常用設計模式之簡單工廠模式
簡單工廠模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。簡單工廠...
常用設計模式之抽象工廠模式
抽象工廠模式 abstract factory pattern 是圍繞乙個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式...