具体实现:
interface IFileOpen() { void Open() }
定义所有文件的公共基类:
abstract class Files:IFileOpen { private FileType fileType = FileType.doc; public FileType FileType { get {return fileType;} } public abstact void Open(); }
abstract class DocFile : Files { public int GetPageCount() { } } abstract class ImageFile : Files { public void ZoomIn() { } public void ZoomOut() { } }
基类Files实现了IFileOpen接口,对派生类做了归档,初步实现了文件类型,图片类型和媒体类型三个大类。
实现具体资料类
class WORDFile:DocFile { public ovveride void Open(){ Console.WriteLine("Open the WORD fILE"); } }
同时设计一个资料管理类来进行资料的统一管理:
class LoadManager { private IList<Files> files = new List<Files>(); public IList<Files> Files { get { return files; } } public void LoadFiles(Files file) { files.Add(file); } //打开所有资料 public void OpenAllFiles() { foreach (IFileOpen file in files) { file.Open(); } } //打开单个资料 public void OpenFile(IFileOpen file) { file.Open(); } //获取文件类型 public FileType GetFileType(string fileName) { //根据指定路径文件返回文件类型 FileInfo fi = new FileInfo(fileName); return (FileType)Enum.Parse(typeof(FileType), fi.Extension); } }
实现简单的客户端,根据所需进行文件的加载:
Class FileClient { public static void Main() { //首先启动文件加载器 LoadManager lm = new LoadManager(); //添加要处理的文件 lm.LoadFiles(new WORDFile()); lm.LoadFiles(new PDFFile()); lm.LoadFiles(new JPGFile()); lm.LoadFiles(new AVGFile()); foreach(Files file in lm.Files){ if(file is 爷爷选择的){ lm.OpenFile(file); } } }
随需而变的业务:
class MPEGFile:MediaFile { public override void Open() { Console.WriteLine("Open the MPEG file"); } }
添加新文件的加载操作
lm.LoadFiles(new MPEGFile());