0102-进程操作(面向对象简单工厂模式,打开输入文件)

//本节学习用面向对象的方式,打开用户输入的文件
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace day011
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("输入文件路径");
            string fileP = Console.ReadLine();
            Console.WriteLine("输入文件名称");
            string fileN = Console.ReadLine();
            //通过简单工厂模式返回一个父类:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例
            BaseFile bf = GetFile(fileP, fileN);
            if (bf != null)
            {
                bf.FileOpen();
            }
        }

        public static BaseFile GetFile(string filePath,string fileName)
        {
            BaseFile bf = null;
            string fileExt = Path.GetExtension(fileName);
            switch (fileExt)
            {
                case ".txt":
                    bf=new TxtFile(filePath,fileName);
                    break;
                case ".mp3":
                    bf=new Mp3File(filePath,fileName);
                    break;
                default:
                    bf=new BaseFile(filePath,fileName);
                    break;
            }
            return bf;
        }
    }

    class BaseFile  //注意:正式项目中每个类要单独创建文件,不建议多个类放到一个单元文件中
    {
        //类的成员包括:字段、属性、构造函数、函数、索引器
        private string _FilePath;//字段命名使用下划线开始,创建属性快捷键:Ctrl+R+E

        public string FilePath
        {
            get { return _FilePath; }
            set { _FilePath = value; }
        }

        public string FileName { get; set; }//自动属性:使用prop+两次Tab键

        public BaseFile(string filePath, string fileName)
        {
            this.FilePath = filePath;
            this.FileName = fileName;
        }
        //设计一个函数用来打开指定的文件
        public void FileOpen()
        {
            ProcessStartInfo psi = new ProcessStartInfo(this.FilePath + "\\" + this.FileName);
            Process pro = new Process();
            pro.StartInfo = psi;
            pro.Start();
        }

    }
    //设计几个子类,注意:父类的构造函数覆盖掉了无参构造函数,所以子类构造函数需显式调用
    class TxtFile : BaseFile
    {
        public TxtFile(string filePath, string fileName) : base(filePath, fileName)
        {
        }
    }
    class Mp3File : BaseFile
    {
        public Mp3File(string filePath, string fileName) : base(filePath, fileName)
        {
        }
    }
}

 

posted @ 2021-04-21 17:55  lybingyu  阅读(79)  评论(0编辑  收藏  举报