C++面向对象编程分享09----20160429_设计模式_李楚煌

来源:互联网 发布:js文件 编辑:程序博客网 时间:2024/05/16 11:11

namespace {public MainForm(){InitializeComponent();string srcSplFilename = null; //记录源文件路径string desSplFilename = null; //记录存储路}private void btnSource_Click(object sender, EventArgs e){OpenFileDialog openDlg = new OpenFileDialog();if (openDlg.ShowDialog() == DialogResult.OK && openDlg.FileName != string.Empty){srcSplFilename = openDlg.FileName; //记录源文件的存储路径}}if (folderDlg.ShowDialog() == DialogResult.OK){{//以源文件路径对应的字符串和Open文件打开模式初始化FileStream文件流实例splitFileStream = new FileStream(srcSplFilename, FileMode.Open);//以FileStream文件流来初始化BinaryReader文件流实例splitFileReader = new BinaryReader(splitFileStream);//获取分割后所得到的小文件的总数desFileSize = int.Parse(cboSize.SelectedItem.ToString()) * 1024 ;desFileCount = (int)(splitFileStream.Length / desFileSize);if (splitFileStream.Length % desFileSize != 0)desFileCount++;//数组desExtra的最后一个元素为源文件的扩展名,也即新文件扩展名desExtra = srcSplFilename.Split('.');//获取源文件的文件名filename = srcSplFilename.Substring(srcSplFilename.LastIndexOf("\\") + 1, srcSplFilename.LastIndexOf(".") - (srcSplFilename.LastIndexOf("\\") + 1));//设置进度条空间的Maximum属性progBarSplit.Maximum = desFileCount - 1;//循环处理,依次将大文件分割成多个小文件While(desFileCount 1= 0){//确定小文件的文件名称string desFileName = @desSplFilename + @"\" + filename + i.ToString().PadLeft(4, '0') + "." + desExtra[desExtra.Length - 1];//关闭相应目的文件流实例desFileStream.Close();}//关闭源文件流实例splitFileReader.Close();splitFileStream.Close();}catch (Exception ex){MessageBox.Show(ex.ToString());}srcPath=openDlg.FileName.Split(@"\".ToCharArray());for (i = 0; i < srcPath.Length - 1; i++){strTemp = strTemp + srcPath[i] + @".";}srcMerFilename = strTemp; //获取文件所在目录filename = srcPath[srcPath.Length - 1].Split(@".".ToCharArray());for (i = 0; i < filename.Length - 1; i++){fileName = fileName + filename[i] + @".";}fileName = fileName.Substring(0,fileName.Length - 1); //获得文件名fileExtra = filename[filename.Length - 1]; //获得文件扩展}private void btnMergDes_Click(object sender, EventArgs e){FolderBrowserDialog folderDlg = new FolderBrowserDialog();folderDlg.Description = "请选择目的文件存放的文件夹";private void btnMerge_Click(object sender, EventArgs e){string filename = "";string[] arrFileNames; //记录所有分割后得到的所有小文件的名称if (srcReader != null)srcReader.Close();txtMerSrc.Clear();txtMergDes.Clear();srcMerFilename = null;desMerFilename = null;fileName = "";fileExtra = "";}}}

设计模式分为:策略模式、观察者模式、装饰模式、桥模式、门面模式、代理模式、原型模式

而方法有模板方法、工厂方法,

这些的内核在于我之前分享的C++的三把大刀:复合、继承、委托:

http://blog.csdn.net/a759460146/article/details/50914027

今天先讲讲创建型模式:

第一个: Simple Factory Pattern

一个软件提供多个外观不同的按钮,按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性

从而使得它们可以呈现不同的外观,

如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,

并提供一个调用方便的方法,把该参数传入方法返回一个相应的按钮对象,这就是简单工厂模式。

在简单工厂模式中,可以根据参数的不同返回不同类的实例。

简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来相对容易。
在调用工厂类的工厂方法时,可通过类名直接调用,而且只需要传入一个简单的参数即可,在

实际开发中,还可以在调用时将所传入的参数保存在XML等格式的配置文件中,

修改参数时不用修改任何源代码。

这是基础的设计模式,后续会有所补充。



1 0
原创粉丝点击