籤:Java 抽象工廠模式 休閒 Abstract Factory 職場 原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://haolloyin.blog.51cto.com/1177454/332802 抽象工廠模式(Abstract Factory):爲創建一組相關或者互相依賴的對象提供一個接口,而無需指定它們對應的具體類。通用類圖如下:例如,我們現在有兩種產品A和B,而產品A和B分別都有兩個廠商1和2進行生產,在這裏我們把不同的廠商1、廠商2理解爲牌子1和牌子2,那麼廠商1就生產A1、B1,廠商2生產A2、B2。此時,不同的廠商肯定要生產自己的產品(如A1、B1),每個廠商都有自己的一系列產品,這就與上面抽象工廠模式的描述類似了。該例子的類圖如下:具體代碼實現如下://定義不同的產品之間的一定具備的標準,用interface實現
//其中的method()方法可看作提取出不同產品的共性,如手機都有類似的功能
interface IProductA{
public void method();
}
interface IProductB{
public void method();
}
//實現了產品標準實現的一系列具體產品
//由於已經設計好A1由廠商1生產,故以下輸出代碼有“廠商x”
class ProductA1 implements IProductA{
public void method() {
System.out.println("廠商1 生產ProductA1 ...");
}
}
class ProductA2 implements IProductA{
public void method() {
System.out.println("廠商2 生產ProductA2 ...");
}
}
class ProductB1 implements IProductB{
public void method() {
System.out.println("廠商1 生產ProductB1 ...");
}
}
class ProductB2 implements IProductB{
public void method() {
System.out.println("廠商2 生產ProductB2 ...");
}
}
//每一種牌子的產品生產工廠,即不同的廠商負責自己牌子產品的生產
abstract class Factory1{
abstract IProductA getProductA1();
abstract IProductB getProductB1();
}
abstract class Factory2{
abstract IProductA getProductA2();
abstract IProductB getProductB2();
}
//具體的工廠用來生產相關的產品
class ConcreteFactory1 extends Factory1{
public IProductA getProductA1() {
return new ProductA1();
}
public IProductB getProductB1() {
return new ProductB1();
}
}
class ConcreteFactoryB extends Factory2{
public IProductA getProductA2() {
return new ProductA2();
}
public IProductB getProductB2() {
return new ProductB2();
}
}
//測試類
public class Client {
public static void main(String[] args) {
//廠商1負責生產產品A1、B1
Factory1 factory1 = new ConcreteFactory1();
IProductA productA1 = factory1.getProductA1();
IProductB productB1 = factory1.getProductB1();
productA1.method();
productB1.method();
//廠商2負責生產產品A2、B2
Factory2 factory2 = new ConcreteFactoryB();
IProductA productA2 = factory2.getProductA2();
IProductB productB2 = factory2.getProductB2();
productA2.method();
productB2.method();
}
}運行結果:
廠商1 生產ProductA1 ... 廠商1 生產ProductB1 ... 廠商2 生產ProductA2 ... 廠商2 生產ProductB2 ... |
本文出自 “螞蟻” 博客,請務必保留此出處http://haolloyin.blog.51cto.com/1177454/332802