抽象工廠模式:提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。
抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提
供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。
與工廠方法模式的區別:
抽象工廠模式:
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...