工廠模式 抽象工廠

2021-08-08 04:06:38 字數 2996 閱讀 1350

在看抽象工廠前,我們需要引入兩個概念:

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,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...