您的位置:首页 > 编程语言 > C语言/C++

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

2016-04-29 16:30 369 查看


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等格式的配置文件中,

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

这是基础的设计模式,后续会有所补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++