一、簡單工廠模式
定義:專門定義乙個類用來負責建立其他類的例項,被建立的類通常具有共同的父類(沒有也行)
//產品類:
public
inte***ce
product
//繼承產品的子類a產品
public
class
producta
implements
product
}//繼承產品的子類b產品
public
class
productb
implements
product
}
對於產品例項的建立,我們可以建立乙個工廠來負責建立他們,需要什麼樣的產品傳入相應的產品引數
public
class
productfactory}}
public
enum producttype
//呼叫工廠為我們建立物件
public
class
tooluser
catch
(exception e)
}}
這種模式可以管理物件的建立,但是如果再生產一種產品c,需要改動工廠和列舉,耦合性比較大。
二、工廠方法模式
定義:建立乙個生產物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類.
為了解決上述耦合過強的問題,我們將工廠類變得抽象,在工廠方法模式中,核心的工廠類不再負責所有的產品的建立,而是將具體建立的工作交給子類去做,工廠自身只提供建立產品的介面。
//工廠的作用就是生產產品
public
inte***ce
factory
//a工廠負責生產a產品
public
class
productafactory
implements
factory
}//b工廠負責生產b產品
public
class
productbfactory
implements
factory
}public
class
main
}結果:
a產品的特點:好看!
b產品的特點:實用!
在上面的**中,如果需要生產產品c,我們只需要實現工廠介面,建立c工廠類即可,這遵循了開閉原則:
對擴充套件開放,對修改關閉
三、抽象工廠模式
定義:提供乙個建立一系列相關或者相互依賴物件的介面,而無需指定他們具體的類.當一系列物件變成一種,這時就是工廠模式,可以看出工廠模式是抽象工廠模式的特例。
工廠模式中,在工廠中生產產品,產品是需要人使用的,所以可以在工廠中不僅指定生產產品,還可以指定產品使用者,我們還可以指定產品品牌,產品發貨地等一系列特性。
//抽象工廠,用於指定生成產品和產品使用者
public
inte***ce
abstractfactory
//a產品工廠:生成a產品 使用者為a
public
class
productafactory
implements
abstractfactory
public person createperson()
}//b產品工廠:生成b產品 使用者為b
public
class
productbfactory
implements
abstractfactory
public person createperson()
}//使用者介面
public
inte***ce
person
//a使用者
public
class
persona
implements
person
}//b使用者
public
class
personb
implements
person
}
接下來開始加工生產:
public
class
main
}結果:
a產品的特點:好看!
使用者a
b產品的特點:實用!
使用者b
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
抽象工廠模式 常用設計模式 抽象工廠模式
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...
抽象工廠模式 設計模式(九) 抽象工廠模式
提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...