工廠方法模式中的每個具體工廠只有乙個或者一組過載的工廠方法,只能生產一種產品,可能會導致系統中存在大量的工廠類,會增加系統的開銷。有時候需要工廠可以提供多種產品物件,而不是單一的產品物件。例如乙個電器工廠,它可以生產電視、電冰箱、洗衣機、空調之類的。這時候就可以將一些相關產品組成乙個產品族,由乙個工廠來統一生產。
即產品的繼承結構,如乙個抽象類是電視機,其子類包括海爾電視機、海信電視機、tcl電視機。
指同乙個工廠生產的位於不同產品等級結構中的一組產品。如海爾電器工廠生產海爾電視機、海爾冰箱。海爾冰箱和海爾電視機就構成乙個產品族。
當系統所以提供的工廠生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構、屬於不同型別的具體產品時就可以使用抽象工廠模式。工廠方法模式針對的是乙個產品等級結構,抽象工廠模式需要面對多個產品等級結構。
提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。
它宣告了一組用於建立一族產品的方法,每乙個方法對應一種產品。
實現了在抽象工廠中宣告的建立產品的方法,生成一組具體產品,這些產品構成乙個產品族,每乙個產品都位於某個產品等級結構中。
它為每種產品宣告介面,在抽象產品中宣告了產品所具有的業務方法。
它定義具體工廠生產的具體產品物件,實現抽象產品介面中宣告的業務方法。
/**
* * @classname connect
* @description 資料庫連線介面 - 抽象產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public inte***ce connection
/**
* * @classname oracleconnection
* @description oracle資料庫連線類 - 具體產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class oracleconnection implements connection
}
/**
* * @classname mysqlconnection
* @description mysql資料庫連線類 - 具體產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class mysqlconnection implements connection
}
/**
* * @classname statement
* @description 資料庫語句 - 抽象產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public inte***ce statement
/**
* * @classname oraclestatement
* @description oracle資料庫語句類 - 具體產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class oraclestatement implements statement
}
/**
* * @classname mysqlstatement
* @description mysql資料庫語句類 - 具體產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class mysqlstatement implements statement
}
/**
* * @classname dbfactory
* @description 資料庫工廠介面 - 抽象工廠
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public inte***ce dbfactory
/**
* * @classname oraclefactory
* @description oracle資料庫工廠 - 具體工廠
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class oraclefactory implements dbfactory
@override
public statement createstatement()
}
/**
* * @classname mysqlfactory
* @description mysql資料庫工廠 - 具體工廠
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class mysqlfactory implements dbfactory
@override
public statement createstatement()
}
/**
* * @classname client
* @description 客戶端測試類
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class client
}
1.隔離了具體類的生成,使得客戶端並不需要知道什麼被建立。由於這種隔離,更換乙個具體工廠就變得相對容易,所有的具體工廠都實現了抽象工廠中定義的那些公共介面,因此只需要改變具體工廠的例項就可以在某種程度上改變整個軟體系統的行為。
2.當乙個產品族中有多個物件被設計在一起工作時,它能夠保證客戶端始終只使用同乙個產品族的物件。
3.增加新的產品族很方便,無需修改已有系統,符合開閉原則。
增加新的產品等級結構麻煩,需要對原有系統進行較大修改,甚至需要修改抽象層**,違背開閉原則。
抽象工廠模式 產品等級結構與產品族
在工廠方法模式中具體工廠負責生產具體的產品,每乙個具體工廠對應一種具體產品,工廠方法具有唯一性,一般情況下,乙個具體工廠中只有乙個或者一組過載的工廠方法。但是有時候我們希望乙個工廠可以提供多個產品物件,而不是單一的產品物件,如乙個電器工廠,它可以生產電視機 電冰箱 空調等多種電器,而不是只生產某一種...
工廠方法模式 抽象工廠與抽象產品的結合
工廠方法模式是在簡單工廠模式上再加了一層,新增了乙個抽象工廠和具體工廠。即不再使用乙個工廠類來統一負責所有產品的建立,而是把建立具體產品的任務交給了專門的工廠子類去完成。比如說,我要生產矩形 圓形 菱形這三種形狀,就不再使用乙個工廠了,而是讓矩形工廠 圓形工廠 菱形工廠去完成,而這三個工廠又是形狀工...
工廠模式與抽象工廠模式
原始出處 作者資訊和本宣告。否則將追究法律責任。工廠模式與抽象工廠模式,相信同行不會陌生 在網上及相關書裡面也看過這方面的介紹 推薦這兩本書 steven john metsker s design patterns in c 和 gof s design pattern framework2.0 ...