android設計模式之抽象工廠模式

2021-06-21 21:16:04 字數 2425 閱讀 4384

定義

抽象工廠模式定義為為建立一組相關或者相互依賴的物件提供乙個介面,而且無需指定他們的具體類。它是工廠方法模式的公升級版本。在有多個業務品種,業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。

模式中包含的角色及其職責

1.抽象工廠(creator)角色

抽象工廠模式的核心,包含對多個產品結構的宣告,任何工廠類都必須實現這個介面。

2.具體工廠(concrete  creator)角色

具體工廠類是抽象工廠的乙個實現,負責例項化某個產品族中的產品物件。

3.抽象(product)角色

抽象模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。

4.具體產品(concreteproduct)角色

抽象模式所建立的具體例項物件

總結:抽象工廠中方法對應產品結構,具體工廠對應產品族。

//抽象產品類

public abstract class abstractproducta

// 每個產品相同的方法,不同的實現

public abstract void dosomething();

}//抽象產品類

public abstract class abstractproductb

// 每個產品相同的方法,不同的實現

public abstract void dosomething();

}//產品a1的實現類

public class producta1 extends abstractproducta

}//產品a2的實現類

public class producta2 extends abstractproducta

}//產品b1的實現類

public class productb1 extends abstractproductb

}//產品b2的實現類

public class productb2 extends abstractproductb

}//抽象工廠

public abstract class abstractcreator

//產品等級1的實現類

public class creator1 extends abstractcreator

// 只產生產品等級為1的b產品

public abstractproductb createproductb()

}//產品等級2的實現類

public class creator2 extends abstractcreator

// 只產生產品等級為2的b產品

public abstractproductb createproductb()

}//場景類

public class client

}

另乙個具體例子

public inte***ce fruitfactory 

public class northfruitfactory implements fruitfactory

public fruit getbanana()

}public class southfruitfactory implements fruitfactory

public fruit getbanana()

}public inte***ce fruit

public void get()

}public class northbanana extends banana

} public void get()

}public class southbanana extends banana

}public class mainclass

}

問題增加新的產品族時,只需要向系統中加入新的具體工廠類就可以了,沒有必要修改已有的工廠角色或者產品角色。因此,在系統中的產品族增加時,抽象工廠模式是支援「開一閉」原則的。

增加新的產品等級結構需要修改所有的工廠角色,給每乙個工廠類都增加乙個新的工廠方

法,而這顯然是違背「開一閉」原則的。

比較

抽象工廠模式與工廠方法模式的最大區別就在於,工廠方法模式針對的是乙個產品等級結構;而抽象工廠模式則需要面對多個產品等級結構。

設計模式之工廠模式(簡單工廠 工廠模式 抽象工廠)

參考博文 侵權必刪 什麼是工廠模式 通過 物件建立 模式繞開new,來避免物件建立 new 過程中所導致的緊耦合 依賴具體類 適用性 使用new建立物件且導致緊耦合的場景。思考 物件導向程式設計要以動態的思維去看待 換句話說,在看 時需要時間概念,發現 在未來的穩定之處和變化之處。一般介面和抽象類是...

設計模式之抽象工廠模式

目標 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如 access sql server 產品的具體類名被具體工廠的實現分離 下面是示例 include include include using namespace std 使用者抽象介面 class ius...

設計模式之抽象工廠模式

定義 abstract factory,提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類 場景 有一家生產螺絲螺帽的工廠,螺絲有兩種型號 公的和母的,螺帽也有兩種型號 公的和母的。沒個車間只生產一種螺絲和螺帽。這裡車間就是乙個concretefactory 具體工廠 螺絲和螺帽便是...