zoukankan      html  css  js  c++  java
  • 设计模式学习笔记——Prototype原型模式

    1、使用单例模式定义类的构造函数
    2、将类的初始化改为克隆

    2.1单例模式的类初始化

    private static Student _Student =new Student();//这个是线程不安全的,只是为区分原型模式举例
    
    public static Student CreateInstanceSingleton()
    {
      return _Student;
    }

    2.2 原型模式类的初始化

    private static StudentProperty _StudentProperty =new StudentProperty();//线程不安全,如果类的实例化需要更多的属性赋值,可以改为使用私有构造函数
    
    public static StudentProperty Clone()
    {
      StudentProperty studentCopy = (StudentProperty)_StudentProperty.MemberwiseClone();//浅克隆
      return studentCopy;
    }

    3、类的初始化使用克隆方式

    StudentProperty studentProperty1 = StudentProperty.Clone();
                studentProperty1.Name = "后会无期";
                studentProperty1.Id = 1;
                studentProperty1.Now = DateTime.Now;

    总结:

    原型模式是为了解决单列模式初始化快,但是类的属性所有对象共用(相互覆盖)而使用的,克隆分为深克隆和浅克隆。浅克隆只能克隆值类型的属性,引用类型的变量依然会被相互覆盖,深克隆可以将引用类型的变量也复制一遍。

    深克隆的其中一种实现方式是,使用将类及属性类加上[Serializable]标记,并在克隆的时候,序列化并反序列化复制

    StudentProperty studentProperty3 = SerializeHelper.Derializable<StudentProperty>(SerializeHelper.Serializable(studentProperty2));//借助序列化,实现深克隆
                studentProperty3.Class.Name = "高级班";

    又是一篇学习后过几天再总结的文章,你懂的,看看就好。当然原型模式是一种比较简单的设计模式,这篇文章应该没有总结错的地方

    将偷懒进行到极致,是一个程序员的基本素养
  • 相关阅读:
    最长双回文串
    BUUOJ misc 二维码
    HDU 1284 钱币兑换问题 (动态规划 背包方案数)
    HDU 1260 Tickets (动态规划)
    HDU 1231 最大连续子序列 (动态规划)
    HDU 1203 I NEED A OFFER! (动态规划、01背包、概率)
    BUUOJ reverse SimpleRev (爆破)
    BUUOJ reverse 不一样的flag
    HDU 1176 免费馅饼 (动态规划、另类数塔)
    HDU 1171 Big Event in HDU (动态规划、01背包)
  • 原文地址:https://www.cnblogs.com/bamboo-zhang/p/9128879.html
Copyright © 2011-2022 走看看