在前面已經講解過工廠方法模式,這倆者有什麼區別呢?前面所說的工廠方法模式只會生產一種具體的產品,而抽象工廠模式生產出來的產品是不確定的。例如不同作業系統中控制項的實現不一樣,展示效果也不一樣,對於作業系統如android,ios,windowphone本身構成乙個產品類,而其控制項如button,textview也構成產品類,兩種產品類兩種變化,各有各的特性。
為建立一組相關或者相互依賴的物件提供乙個介面,而不需要指定它們的具體類。
乙個物件族有相同約束時可以使用抽象工廠方法。舉個例子:android,ios,phone下都有button,textview,兩者屬於控制項的範圍,但是它們所在作業系統不一樣,所以**邏輯實現也是不一樣的,這時就可以考慮使用抽象工廠方法模式來生產android,ios,phone下控制項。
角色介紹:
雖然抽象工廠方法種類繁多,但是主要分成四類:
在工廠方法模式中,我們生產了三種車型,雖然整體流程一樣,但是各個車型的零件差別很大,而且廠家也不一樣,三種車型對應是一系列車,而零件比如輪胎、發動機、制動系統等對應的是一系列零件部件,兩者是倆種不同的產品型別,這時候就可以將抽象工廠模式運用到其中。
首先汽車需要生產輪胎,發動機,制動系統這三種部件
輪胎相關類
抽象產品角色
public abstract class tire
具體產品角色
public class normaltire extends tire
}
public class suvtire extends tire
}
發動機相關類
抽象產品角色
public abstract class engine
具體產品角色
public class domesticengine extends engine
}
public class importengine extends engine
}
制動系統相關類
抽象產品角色
public abstract class brake
具體產品角色
public class normalbrake extends brake
}
public class seniorbrake extends brake
}
有了零件就要有工廠生產
抽象汽車工廠,即抽象工廠角色
public abstract class ca***ctory
每種車型的零件部件不同
奧迪工廠, 具體工廠角色
public class audica***ctory extends ca***ctory
@override
public engine createengine()
@override
public brake createbrake()
}
賓士工廠, 具體工廠角色
public class benzca***ctory extends ca***ctory
@override
public engine createengine()
@override
public brake createbrake()
}
寶馬工廠, 具體工廠角色
public class bwmca***ctory extends ca***ctory
@override
public engine createengine()
@override
public brake createbrake()
}
最後在乙個client中模擬
public class client
}
輸出結果
普通輪胎
國產發動機
普通制動
越野輪胎
進口發動機
高階制動
普通輪胎
進口發動機
高階制動
上面只是模擬生產三種車系的情況,如果要生產其他車系,就要增加其他車系的工廠,不同車系構成乙個產品類。如果對於奧迪工廠,我們把普通輪胎換成越野輪胎,雖然生產出來的車還是奧迪車型,但零件又和原本第一次生產出來的不一樣,不同零件又構成乙個產品類。兩種產品類兩種變化。
我們在開發中很少會出現多個產品種類的情況,大部分情況我們使用工廠方式模式就可以解決。
優點:分離介面與實現,客戶端使用抽象工廠來建立需要的物件,而客戶端根本不知道具體的實現類是誰,使其從具體的產品實現中解耦。
缺點:(1)類檔案變多
(2)每當增加乙個產品類就要修改抽象工廠,那麼所有具體的工廠類均會被修改,不容易擴充套件新的產品類
本文原始碼位置
設計模式 建立型之抽象工廠模式
在工廠模式中,具體工廠負責生產具體的產品,每乙個具體工廠對應一種具體的產品,但有的時候,我們需要乙個工廠可以生產多種產品。為了闡述的更加清晰明了,首先引入兩個抽象工廠模式中概念 產品等級結構和產品族 提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類,抽象工廠模式也叫kit模式。其實...
設計模式 建立型 抽象工廠模式
建立性模式有五種 1.工廠模式 簡單工廠模式 經常被用到,不屬於gof23種設計模式 工廠方法模式 抽象工廠模式 2.建造者模式 3.原型模式 4.單例模式 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客...
設計模式 建立型 抽象工廠模式
有點複雜。一般的工廠模式下,每個實體類都需要乙個對應的工廠,當實體類過多時工廠的數量也會變多。當實體類還有子類時,我們需要的工廠就更多了。抽象工廠模式是將所有工廠的共性抽象出來 public inte ce animalfactory 生產母狗和母貓 public class femaleanima...