C#编程中使用设计模式中的原型模式的实例讲解

2019-12-26 17:41:16王振洲
易采站长站为您分析C#编程中使用设计模式中的原型模式的实例讲解,原型模式创建新对象方便快捷,而且可在运行时根据需要通过克隆来添加和去除他们,也可在程序运行是根据情况来修改类内部的数据,需要的朋友可以参考下  

一、引言
在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配了多个一样的类实例对象,然后如果采用工厂模式来创建这样的系统的话,随着产品类的不断增加,导致子类的数量不断增多,反而增加了系统复杂程度,所以在这里使用工厂模式来封装类创建过程并不合适,然而原型模式可以很好地解决这个问题,因为每个类实例都是相同的,当我们需要多个相同的类实例时,没必要每次都使用new运算符去创建相同的类实例对象,此时我们一般思路就是想——只创建一个类实例对象,如果后面需要更多这样的实例,可以通过对原来对象拷贝一份来完成创建,这样在内存中不需要创建多个相同的类实例,从而减少内存的消耗和达到类实例的复用。 然而这个思路正是原型模式的实现方式。下面就具体介绍下设计模式中的原型设计模式。

二、原型模式的详细介绍
我们来看一个入学考试场景实例

基对象(一般为接口,抽象类):考试题(样卷)

原型模式的复职克隆:根据需要印刷考卷,这里的考卷都是复制考试题样卷

客户端:学生答卷,同一套试卷,学生做题不可能一模一样

类图:

C#编程中使用设计模式中的原型模式的实例讲解

接口:试卷样例代码


  /// <summary>
  /// 选答题
  /// </summary>
  public class SelectTest
  {
    private string other;
    public string 你老婆多大
    {
      get
      {
        return this.other;
      }
      set
      {
        this.other = value;
      }
    }
  }
  /// <summary>
  /// 面试题
  /// </summary>
  public interface Itest
  {
    Itest Clone();

    string 知道设计模式吗
    {
      get;
      set;
    }
    string 设计模式有几种
    {
      get;
      set;
    }
    string 你知道那些
    {
      get;
      set;
    }
    SelectTest 附加题
    {
      get;
      set;
    }

    Test Test
    {
      get;
      set;
    }

    Test Test1
    {
      get;
      set;
    }
  }