多态

 具体实现:

  

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());
原文地址:https://www.cnblogs.com/maxuefeng/p/15625959.html