zoukankan      html  css  js  c++  java
  • 多态

     具体实现:

      

    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());
  • 相关阅读:
    RMAN参考使用手册2[转载]
    硬盘故障的解决
    控制文件和重做日志文件
    设置DBID
    让虚拟机从U盘启动[转载]
    windows7桌面预览不出现的解决方法
    让.Net程序脱离.Net Framework框架运行
    抗辐射多吃六种食物《转》
    ASPX.NET学习记录(一)
    饮食影响人的七情六欲《转》
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/15625959.html
Copyright © 2011-2022 走看看