抽象工廠模式

2021-08-31 12:39:11 字數 3214 閱讀 4712

抽象工廠模式:提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。

抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提

供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。

與工廠方法模式的區別:

抽象工廠模式:

1.多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。

2.乙個抽象工廠類,可以派生出多個具體的工廠類。

3.每個具體工廠類可以建立多個具體產品類的例項。  

工廠方法模式:

1.乙個抽象產品類,可以派生出多個具體產品類。

2.乙個抽象工廠類,可以派生出多個具體工廠類。 

3.每個具體工廠類只能建立乙個具體產品類的例項。

抽象工廠就像工廠,而工廠方法則像是工廠的一種產品生產線

抽象工廠模式例項:

/**

* 使用者類

*/public class user

public void setid(string id)

public string getname()

public void setname(string name)

}

/**

* 使用者介面

*/public inte***ce iuser

/**

* 用於訪問access的user。

*/public class useraccess implements iuser

public void insertuser(user user)

}

/**

* 用於訪問sqlserver的user。

*/public class usersqlserver implements iuser

public void insertuser(user user)

}

/**

* 部門類

*/public class department

public void setid(string id)

public string getname()

public void setname(string name)

}

/**

* 部門介面

*/public inte***ce idepartment

/**

* 用於訪問access的department。

*/public class departmentaccess implements idepartment

public void insertdepartment(department department)

}

/**

* 用於訪問sqlserver的department。

*/public class departmentsqlserver implements idepartment

public void insertdepartment(department department)

}

/**

* 定義乙個建立訪問user表和部門表物件的抽象的工廠介面

*/public inte***ce ifactory

/**

* 實現ifactory介面,例項化accessuser和accessdepartment。

*/public class factoryaccess implements ifactory

public iuser createuser()

}

/**

* 實現ifactory介面,例項化sqlserveruser和sqlserverdepartment。

*/public class factorysqlserver implements ifactory

public iuser createuser()

}

public class main 

}

用簡單工廠改進抽象工廠:拋棄了ifactory,factorysqlserver,factoryaccess三個工廠類.不足之處:如果需要增加oracle資料庫,應需要在每個方法的switch中新增case處理。

/**

* 資料庫列舉類

*/public enum databaseenum

public class dataaccess 		

return iuser; }

// 根據不同的資料庫操作部門表

public static idepartment createdepartment()

return idepartment;

}}

簡單工廠類的改進:採用反射機制解決簡單工廠中switch分支新增case處理的修改變動。也可採用配置檔案和反射技術進行改進。

public class dataaccessreflect  catch (instantiationexception e)  catch (illegalacces***ception e)  catch (classnotfoundexception e) 

return iuser;

} // 根據不同的資料庫操作部門表

public static idepartment createdepartment() catch (instantiationexception e) catch (illegalacces***ception e) catch (classnotfoundexception e)

return idepartment;

}}

public class main 

}

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...

工廠模式 抽象工廠模式

這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...

工廠模式 抽象工廠模式

子類父類代換 場景 在不同的條件下,需要建立不同的實現子類時。如網路通訊可以使用tcp udp。可以實現同乙個介面,通過工廠類根據條件 tcp或udp 來例項化不同的子類。這些子類符合黎克特制代換原則。public inte ce tlprotocol public class tcpimpleme...