设计模式(4)--AbstractFactory(抽象工厂模式)--创建型
生活随笔
收集整理的這篇文章主要介紹了
设计模式(4)--AbstractFactory(抽象工厂模式)--创建型
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.模式定義:
抽象工廠是應(yīng)對(duì)產(chǎn)品族概念的,提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無須指定它們的具體類2.模式特點(diǎn):
抽象工廠模式為創(chuàng)建一組對(duì)象提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只是創(chuàng)建一種產(chǎn)品,它負(fù)責(zé)創(chuàng)建一族產(chǎn)品;3.使用場(chǎng)景:
為創(chuàng)建一組對(duì)象提供了一種解決方案;4.模式實(shí)現(xiàn):
(1)抽象工廠角色:
這是工廠方法模式的核心,它與應(yīng)用程序無關(guān)。是具體工廠角色必須實(shí)現(xiàn)的接口或者必須繼承的父類。在java中它由抽象類或者接口來實(shí)現(xiàn)。 //發(fā)動(dòng)機(jī)以及型號(hào) public interface Engine { } public class EngineA extends Engine{ public EngineA(){ System.out.println("制造-->EngineA"); } } public class EngineBextends Engine{ public EngineB(){ System.out.println("制造-->EngineB"); } } //空調(diào)以及型號(hào) public interface Aircondition { } public class AirconditionA extends Aircondition{ public AirconditionA(){ System.out.println("制造-->AirconditionA"); } } public class AirconditionB extends Aircondition{ public AirconditionB(){ System.out.println("制造-->AirconditionB"); } }(2)具體工廠角色:
它含有和具體業(yè)務(wù)邏輯有關(guān)的代碼。由應(yīng)用程序調(diào)用以創(chuàng)建對(duì)應(yīng)的具體產(chǎn)品的對(duì)象。在java中它由具體的類來實(shí)現(xiàn)。 //創(chuàng)建工廠的接口 public interface AbstractFactory { //制造發(fā)動(dòng)機(jī) public Engine createEngine(); //制造空調(diào) public Aircondition createAircondition(); }(3)抽象產(chǎn)品角色:
它是具體產(chǎn)品繼承的父類或者是實(shí)現(xiàn)的接口。在java中一般有抽象類或者接口來實(shí)現(xiàn)。 //為寶馬320系列生產(chǎn)配件 public class FactoryBMW320 implements AbstractFactory{ @Override public Engine createEngine() { return new EngineA(); } @Override public Aircondition createAircondition() { return new AirconditionA(); } } //寶馬523系列 public class FactoryBMW523 implements AbstractFactory { @Override public Engine createEngine() { return new EngineB(); } @Override public Aircondition createAircondition() { return new AirconditionB(); } }(4)具體產(chǎn)品角色:
具體工廠角色所創(chuàng)建的對(duì)象就是此角色的實(shí)例。在java中由具體的類來實(shí)現(xiàn)。 public class Customer { public static void main(String[] args){ //生產(chǎn)寶馬320系列配件 FactoryBMW320 factoryBMW320 = new FactoryBMW320(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); //生產(chǎn)寶馬523系列配件 FactoryBMW523 factoryBMW523 = new FactoryBMW523(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); } }?
5.優(yōu)缺點(diǎn):
(1)抽象工廠模式優(yōu)點(diǎn):
[1]分離接口和實(shí)現(xiàn):客戶端使用抽象工廠來創(chuàng)建需要的對(duì)象,而客戶端根本就不知道具體的實(shí)現(xiàn)是誰,客戶端只是面向產(chǎn)品的接口編程而已。也就是說,客戶端從具體的產(chǎn)品實(shí)現(xiàn)中解耦; [2]使切換產(chǎn)品族變得容易:因?yàn)橐粋€(gè)具體的工廠實(shí)現(xiàn)代表的是一個(gè)產(chǎn)品族. [3]向客戶端提供一個(gè)接口,使得客戶端在不必指定產(chǎn)品具體類型的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象?(2)抽象工廠模式缺點(diǎn):
不太容易擴(kuò)展新的產(chǎn)品:如果需要給整個(gè)產(chǎn)品族添加一個(gè)新的產(chǎn)品,那么就需要修改抽象工廠,這樣就會(huì)導(dǎo)致修改所有的工廠實(shí)現(xiàn)類;轉(zhuǎn)載于:https://www.cnblogs.com/yysbolg/p/7410567.html
總結(jié)
以上是生活随笔為你收集整理的设计模式(4)--AbstractFactory(抽象工厂模式)--创建型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVA - 12083 Guardian
- 下一篇: _variant_t和_bstr_t