设计模式系列—原型模式

  一、上篇回顾

  上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但是每个对象的组装的过程来说可能是相对固定的或者说是对象的创建的过程是固定的,那么通过创建者模式可以很好的解决这类复杂对象的创建,而在我们的生活中或者是项目中可能会有这个方面的需求,那么使用创建者模式无疑是好的选择。

  创建者模式中的每个对象组成部分的构建都是对象本身提供的内部方法,具体的创建者只是调用要创建的对象的内部的相应组成部分的构建方法,组织这些对象内部构建方法的执行顺序,完成对象的完整构建。当我们的客户应用程序需要调用这个创建者时,我们只需要通过指导者调用的形式,提供统一的创建者访问入口,通过构造函数注入或者配置文件的形式来完成创建者的注入。

  二、摘要

  本文主要是讲述创建型模式中一个比较特殊的模式-原型模式,这个模式呢,有个最大的特点是克隆一个现有的对象,这个克隆的结果有2种,一种是是浅复制,另一种是深复制,这里我们也会探讨下深复制和浅复制的原理,这样可能更方便大家理解这个原型模式的使用。我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的new()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象。本文将会从以下几个方面进行讲述:

  1、原型模式的使用场景和特点。

  2、浅复制和深复制的原理。

  3、举例说明浅复制和深复制。

  4、原型模式的实现方案。

  5、总结原型模式。

  我们这里先给出一个原型模式的原理图:

image  三、本文大纲

  a、上篇回顾。

  b、摘要。

  c、本文大纲。

  d、原型模式的特点及使用场景。

  e、深复制和浅复制。

  f、原型模式的实现方案。

  g、原型模式使用总结。

  h、系列进度。

  i、下篇预告。

  四、原型模式的特点及使用场景

  原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对象的副本,这种创建象的方式,相比我们之前说的几类创建型模式还是有区别的,之前的讲述的工厂模式与抽象工厂都是通过工厂封装具体的new操作的过程,返回一个新的对象,有的时候我们通过这样的创建工厂创建对象不值得,特别是以下的几个场景的时候,可能使用原型模式更简单也效率更高。

  1、如果说我们的对象类型不是刚开始就能确定,而是这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的类型更容易。这个怎么理解。例如我们有的时候在处理DataTable中的记录进行筛选后,放在一个新的DataTable 中,我们知道如果说2个dataTable的架构不同,那么必须手动的显示的赋值,否则无法使用如下方式进行导入数据:

  下面给出测试的相关代码和说明:

public class DataTableDemo
{
public void CloNETest()
{
string cmdText = "SELECT * FROM TABLE";
DataTable dt
= new DataTable();
//通过执行上面的cmdText 返回一个dataTable对象;

//这时候我们可以如下形式复制一个新的dataTable,而不用先创建一个dataTable,然后把每一列都显示的循环添加到新的 dataTable中,

//这是很大的工作量。
DataTable dt1 = dt.Clone();
//克隆一个新的对象 dt1.

#region 不采用克隆的形式复制一个新的dataTable
DataTable dt2
= new DataTable();

foreach (DataColumn column in dt.Columns)
{
dt2.Columns.Add(column.ColumnName);
}
#endregion
}
}

it知识库设计模式系列—原型模式,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。