[英]Simple factory to retrieve files using constructor dependency injection
我想創建一個靈活的類,以便我可以切換實現。
問題:存儲文件/文檔
選項:本地存儲在服務器文件系統,數據庫等上。
有人可以提供有關該類骨架結構的幫助嗎,我怎么稱呼它?
我沒有使用IoC,並且還真的不想。 我只想在工廠中更改1個代碼以調用另一個實現的靈活性。
接口。 無論您需要存儲文件的地方,只要允許IFileStorer。 如果您需要一種新的存儲方式,只需添加另一個IFileStorer類型。
interface IFileStorer
{
void Store(string file, byte[] data);
}
class LocalStorer : IFileStorer
{
void Store (string id, byte[] data)
{
//code to store locally
}
}
class DBStorer : IFileStorer
{
void Store (string id, byte[] data)
{
//code to store in db
}
}
class AnywhereStorer : IFileStorer
{
void Store (string id, byte[] data)
{
//code to store in anywhere
}
}
使用界面。
interface IStorage
{
void Save(string filename);
}
然后創建您的各種實現:
class LocalStorage : IStorage
{
void Save(string filename)
{
-implementation code-
}
}
然后,在您的消費者類別中
IStorage storage = new LocalStorage();
// uses local storage
storage.Save();
storage = new DatabaseStorage();
// now use database storage
storage.Save();
僅添加一些其他人發布的內容,如果您真的想做一個更改,請考慮一個靜態工廠:
public interface IFileStorage
{
void Store(); //parameters if needed
}
public class FileStorage : IFileStorage
{
public void Store(){}
}
public class DatabaseStorage : IFileStorage
{
public void Store(){}
}
然后,有一個枚舉,您將映射到具體的類:
public enum FileStorageTypes
{
Database,
FileSystem
}
最后是工廠:
public static class StorageFactory
{
public static IFileStorage GetStorage(FileStorageTypes types)
{
switch(types)
{
case FileStorageTypes.Database: return new DatabaseStorage();
case FileStorageTypes.FileSystem: return new FileStorage();
}
}
}
然后,如果您的代碼中有某處需要做一些存儲工作:
public void DoStorage(IFileStorage storage)
{
storage.Store();
}
您可以只調用此方法:
DoStorage(StorageFactory.GetStorage(FileStorageTypes.Database));
並在需要時輕松換出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.