編輯:關於Android編程
抽象工廠模式(Abstract Factory)
抽象工廠模式是對象的創建模式,它是工廠方法模式的進一步延伸和拓展的結果。抽象工廠模式更加抽象化,更具一般性特點。
我們知道,工廠方法模式是針對單一的產品等級結構而產生的,而這裡的抽象工廠模式則是針對多個產品等級結構的。當然,單一的產品等級結構也同樣適用於抽象工廠模式的。下面為其具體的等級結構圖說明:
從上面的結構示意圖,可以看到抽象工廠模式中涉及到了多個等級結構的產品角色;同時,針對每一種產品等級結構,都有一種專門的工廠角色負責創建對應的產品,這就是抽象產品角色了。下面為涉及到相關角色說明:
A、抽象產品角色A、B、C...:該角色為產品的多個等級結構,是對應的具體產品角色的父類。
B、具體產品角色A、B、C...:該角色是與上面抽象產品對應的具體產品角色,而且每一個產品結構中的抽象產品角色與具體產品角色的關系是一對多的關系。
C、抽象工廠角色:該角色為抽象工廠角色,是所有創建產品角色的具體工廠角色的父類。該角色是模式中的核心方法類,裡面聲明了創建不同等級結構產品的方法。
D、具體工廠角色A、B、C...:該角色為具體創建產品等級結構的工廠角色,它與抽象工廠角色是多對一的關系,也是直接與具體產品接觸的創建角色。
我們知道了抽象工廠模式的原理,那麼接下來就直接通過例子來說明它的使用,畢竟能夠正確使用它才說明真正的懂得了它的原理。
例子是這樣的,在產品模塊中有兩個產品的等級結構(當然可以是多個),分別為套餐和娛樂。在每類產品結構中都對應有類目標題,比如:上網套餐和分享娛樂(這個在實際的產品中出現過)。
好了,下面就是我的具體代碼:
抽象產品角色(套餐):
public abstract class Meal {
StringmealName;
int mealNo;
float mealPrice;
public String getMealName() {
return mealName;
}
public void setMealName(String mealName) {
this.mealName = mealName;
}
public int getMealNo() {
return mealNo;
}
public void setMealNo(int mealNo) {
this.mealNo = mealNo;
}
public float getMealPrice() {
return mealPrice;
}
public void setMealPrice(float mealPrice) {
this.mealPrice = mealPrice;
}
@Override
public String toString() {
return Meal[mealName= + mealName + , mealNo= + mealNo
+, mealPrice= + mealPrice + ];
}
}
具體產品角色(普通套餐):
public class CommonMeal extends Meal {
public CommonMeal() {
setMealName(普通上網套餐);
setMealNo(1);
setMealPrice(20.0f);
}
}
具體產品角色(高速套餐):
public class SpeedMeal extends Meal {
public SpeedMeal() {
setMealName(高速上網套餐);
setMealNo(2);
setMealPrice(30.0f);
}
}
抽象產品角色(分享娛樂):
public abstract class Entertainment {
StringetName;
int etNo;
StringetType;
public String getEtName() {
return etName;
}
public void setEtName(String etName) {
this.etName = etName;
}
public int getEtNo() {
return etNo;
}
public void setEtNo(int etNo) {
this.etNo = etNo;
}
public String getEtType() {
return etType;
}
public void setEtType(String etType) {
this.etType = etType;
}
@Override
public String toString() {
return Entertainment[etName= + etName + , etNo= + etNo
+,etType= + etType + ];
}
}
具體產品角色(電影):
public class Movie extends Entertainment {
public Movie() {
setEtName(電影);
setEtNo(1);
setEtType(視頻);
}
}
具體產品角色(小說):
public class Books extends Entertainment {
public Books() {
setEtName(小說);
setEtNo(2);
setEtType(閱讀);
}
}
抽象工廠角色(套餐和娛樂):
public interface ProductFactory {
/* the method of network meal */
public Meal MealFactory();
/* the method of entertainment */
public Entertainment EtFactory();
}
具體工廠角色(工廠A):
public class ProductFactoryOne implements ProductFactory {
@Override
public Meal MealFactory() {
return new SpeedMeal();
}
@Override
public Entertainment EtFactory() {
return new Books();
}
}
具體工廠角色(工廠B):
public class ProductFactoryTwo implements ProductFactory {
@Override
public Meal MealFactory() {
return new CommonMeal();
}
@Override
public Entertainment EtFactory() {
return new Movie();
}
}
具體調用代碼和工廠方法模式類似,這裡不再贅述了,我的代碼的運行效果圖:
到這裡,我們已經分析和使用完了抽象工廠模式了。
近期小米公司推出一款電子產品——《小米錢包》想必大家都有所耳聞吧。不過小編也在網上看到很多網友表示錢包內資金具體提現方法不是很熟悉,
本文實例講述了Android Activity啟動模式之singleTop。分享給大家供大家參考,具體如下:在前面文章《Android Activity啟動模式之stan
本項目圖片素材均來自今日頭條,QQ側滑沒有使用Android原生的NavigationDrawer,而使用的是第三方SlidingMenu,原因是這個控件暫時沒有仔細研究
有很長一段時間沒有更新博客了,最近實在是太忙了,沒有時間去總結,現在終於可以有時間去總結一些Android上面的東西了,很久以前寫過這篇關於使用Android Studi