什麼是抽象工廠模式?舉個例子,現在有兩個品牌廠商,小公尺和華為,小公尺生產手機和路由器,華為也生產手機和路由器,但是小公尺生產的產品都是在小公尺的工廠生產的,華為的產品都是在華為的工廠生產的,但是這兩個工廠要符合同乙個工廠標準,也就是抽象工廠。另外兩個廠商都生產手機,這個生產的手機要否和手機產品的標準,生產的路由器也要符合路由產品的標準。綜上所述每個廠商都會生產不同的產品也就是產品簇。所以抽象工廠是針對整個產品簇的。抽象工廠模式是所有形態的工廠模式中最為抽象和最其一般性的。抽象工廠模式可以向客戶端
提供乙個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。
具體實現**如下:
手機產品介面:
package abf;
/** * 手機產品介面
*/inte***ce iphoneproduct
小公尺手機產品類:
package abf;
/** * 小公尺手機產品
*/public class xiaomiphone implements iphoneproduct
public void sendsms()
public void open()
public void close()
}
華為手機產品類:
package abf;
/** * 華為手機產品
*/public class huaweiphone implements iphoneproduct
public void sendsms()
public void open()
public void close()
}
路由器產品介面:
package abf;
/** * 路由產品介面
*/inte***ce irouterproduct
小公尺路由器產品類:
package abf;
/** *小公尺路由器產品
*/public class xiaomirouter implements irouterproduct
public void close()
public void wifi()
}
華為路由器產品介面:
package abf;
/** * 華為路由器產品
*/public class huaweirouter implements irouterproduct
public void close()
public void wifi()
}
抽象工廠
package abf;
/** * 抽象工廠
*/public inte***ce abstractfactory
小公尺工廠:
package abf;
/** * 生產小公尺產品的工廠
*/public class xiaomifactory implements abstractfactory
public irouterproduct irouterproduct()
}
華為工廠:
package abf;
/** * 生產華為產品的工廠
*/public class huaweifactory implements abstractfactory
public irouterproduct irouterproduct()
}
建立產品的測試類:
package abf;
public class consumer
}
輸出結果如下:
小公尺手機 call
小公尺手機 sendsms
小公尺路由器 open
小公尺路由器 wifi
小公尺路由器 close
華為手機 sendsms
華為手機 call
華為路由器 open
華為路由器 wifi
華為路由器 close
總結:
什麼場景下使用抽象工廠?
當一系列的相關物件(產品簇)穩定的情況下可以使用抽象工廠,如果抽象工廠物件頻繁發生變化時則不適用,比如上面的例子我需要增加膝上型電腦的生產,那麼抽象工廠、具體實現的工廠都要發生變化,這就違反了設計模式的開閉原則,這樣是不推薦的。
23種設計模式之抽象工廠模式
定義 為建立一組相關或者是相互依賴的物件提供介面,而不需要指定它們的具體類 使用場景 乙個物件族有相同的約束時可以使用抽象工廠模式。類圖 抽象工廠模式與工廠方法模式的區別 抽象工廠模式是工廠方法模式的公升級版本,他用來建立一組相關或者相互依賴的物件。他與工廠方法模式的區別就在於,工廠方法模式針對的是...
23種設計模式之 抽象工廠模式
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類 相比入工廠模式而言,如果說工廠模式支援增加任意產品。那麼抽象工廠模式增加新的產品線很容易,但是無法增加新的產品。而簡單工廠模式和工廠模式的區別可以認為工廠模式是優化了簡單工廠模式,遵循了開閉原則 public inte ce com...
23種設計模式之抽象工廠模式
抽象工廠模式定義 提供乙個建立一系列的相關的或者依賴的物件的介面,無需指定它們的具體實現類,具體的時間分別在子類工廠中產生。優點 隔離了具體類的生產實現,使得替換具體的工廠實現類很容易。包含模組有 1.抽象產品介面 定義產品的介面,公共的暴露方法。便於實際的產品類實現。2.具體的產品類 包含實際產品...