COPIED VALUE 的本质意义

定义一个值对象类型,使其实例是可复制的。当它用来和另一个线程通信时,确保复制该值

此模式主要用于解决在多线程中没有必要进行同步的数据对象的传递——使用值传递方式,即可复制。

故没有加锁开销,每一个副本可以随意改变,但是改变只针对副本本身发生,可以看作原型模式的另一种存在。

C++中的复制构造函数即为此而生,

C#中的Struct就是值对象类型的,

而Java则需要手动进行对象的副本。

简单示例,可以看出struct直接赋值之后得到的对象是一个副本,这是Copyed Value的本意

using System;

namespace ConsoleApplication1
{
    struct CopyedValue
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            CopyedValue cv = new CopyedValue()
            {
                Age = 25,
                Name = "daniu"
            };

            var cv2 = cv;
            cv2.Name = "daniu2";
            cv2.Age = 26;

            Console.WriteLine(cv.Age);
            Console.WriteLine(cv.Name);
            Console.WriteLine(cv2.Age);
            Console.WriteLine(cv2.Name);
        }
    }
}

 

原文地址:https://www.cnblogs.com/pengzhen/p/3579415.html