在看抽象工廠前,我們需要引入兩個概念:
1、產品等級結構
2、產品族
我們現在有這樣兩個產品型別:汽車(car)、自行車(bike);有兩家公司:寶馬(bmw)、奧迪(audi),每乙個廠家都能夠生產這兩種型別的產品:bmw介面(bmwcar,bmwbike),audi介面(audicar,audibike)。在這裡car是乙個抽象型別,bmwcar是car的具體實現類,audicar也是car的具體實現類。因此我們就可以說audicar和bmwcar屬於同乙個產品等級。每乙個工廠又可以生產所有型別的產品(bmw工廠就可以生產bmwcar和bmwbike)因此我們就可以說bmwcar,bmwbike屬於同乙個產品族。
首先,我們先抽象出乙個car,乙個bike:
package com.abstractproduct;
public abstract class bike
package com.abstractproduct;
public abstract class car
接下來需要寫乙個工廠介面:
package com.factorymode;
import com.abstractproduct.bike;
import com.abstractproduct.car;
public inte***ce abstractfactory
從上面的介面可以看出,乙個工廠可以同時生產car型別和bike型別的產品;
我們這裡有兩家工廠,乙個bmw,乙個audi,因此我們需要建立出來不同工廠的具體的產品,他們分別繼承自(car,bike)
bmwcar
package com.entiryproduct;
import com.abstractproduct.car;
public class bmwcar extends car
}
bmwbike
package com.entiryproduct;
import com.abstractproduct.bike;
public class bmwbike extends bike
}
audicar
package com.entiryproduct;
import com.abstractproduct.car;
public class audicar extends car
}
audibike
package com.entiryproduct;
import com.abstractproduct.bike;
public class audibike extends bike
}
接下來就是具體建立兩個不同的工廠了,它們都實現了abstractfactory介面
bmwfactory
package com.entityfactory;
import com.abstractproduct.bike;
import com.abstractproduct.car;
import com.entiryproduct.bmwbike;
import com.entiryproduct.bmwcar;
import com.factorymode.abstractfactory;
public class bmwfactory implements abstractfactory
@override
public bike producebike()
}
audifacroty
package com.entityfactory;
import com.abstractproduct.bike;
import com.abstractproduct.car;
import com.entiryproduct.audibike;
import com.entiryproduct.audicar;
import com.factorymode.abstractfactory;
public class audifactory implements abstractfactory
@override
public bike producebike()
}
在具體的工廠中,都實現了producecar和prodecebike方法用來生產實際的產品。
我們寫乙個測試類來驗證一下:
package com.test;
import com.abstractproduct.bike;
import com.abstractproduct.car;
import com.entityfactory.bmwfactory;
import com.factorymode.abstractfactory;
public class main
}
這裡我們例項化了乙個bmw工廠(bmwfactory),它可以同時生產出兩種產品(car和bike),執行一下,結果如下:
i am bmw car
i am bmw bike
可以看到,bmw工廠中,生產出來的產品是bmw car,和bmw bike。同一家工廠可以生產不同型別、但是屬於同乙個產品族的產品(bmwcar,bmwbike)。
到此結束~
分析這個,一開始在概念上走上了誤區,把自己繞進去了,後來看了別人的文章才理清楚這個關係,主要還是在理解 產品等級結構,和產品族的概念上,只要理解了這兩個概念,就能很順利的理解抽象工廠的內容。看來還是自己的水平有限,技術知識儲備提公升迫在眉睫。
加油!!!
抽象工廠模式 抽象工廠模式
抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...
工廠模式 抽象工廠
1 為了提高內聚和松耦合,我們經常會抽象出一些類的公共介面以形成抽象基類或者介面。這樣我們可以通過宣告乙個指向基類的指標來指向實際的子類實現,達到了多型的目的。這裡很容易出現的乙個問題是 若干個子類繼承自抽象基類,我們必須在每次要用到子類的地方就寫如 new 的 這裡帶來兩個問題 1 客戶程式設計師...
工廠模式 抽象工廠模式
這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...