首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解原型模式

理解原型模式
EN

Stack Overflow用户
提问于 2016-06-03 10:59:21
回答 1查看 333关注 0票数 0

我有一个关于原型模式的问题。

我看到原型模式是有效的,因为它复制对象而不是创建一个新的对象,这被认为是一个昂贵的操作。

因此,在此基础上,我尝试了一个样本,我看到了不同的结果。我是用正确的方式检查了还是漏了什么?

代码语言:javascript
复制
    static void Main(string[] args)
    {
        var sw = new Stopwatch();
        sw.Start();
        Employee e;
        for (var i = 0; i < 100000; i++)
        {
            e = new Employee(5, "sandesh", 27, "Bengaluru");
            e.Print();
        }
        sw.Stop();
        Console.WriteLine("New : " + sw.ElapsedMilliseconds);

        sw.Reset();
        sw.Start();
        e = new Employee(5, "sandesh", 27, "Bengaluru");
        for (var i = 0; i < 100000; i++)
        {
            var en = e.Clone();
            en.Print();
        }
        sw.Stop();
        Console.WriteLine("Clone : " + sw.ElapsedMilliseconds);

        Console.ReadLine();
    }


public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Place { get; set; }

    public Employee(int id, string name, int age, string place)
    {
        Id = id;
        Name = name;
        Age = age;
        Place = place;
    }


    public Employee Clone()
    {
        return (Employee)this.MemberwiseClone();
    }

    public void Print()
    {
        var sum = Id * Age;
        var full = sum + Name + Place;
    }
}

结果如下:第一轮:-新: 18克隆: 26

第二轮:-新:34个克隆人:30

第三轮:-新:20克隆人:33

感谢你能帮我理解这个模式。另外,创建一个新对象所需的额外费用是什么,而这在克隆过程中并不会发生?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-03 11:27:57

看起来,您正在寻找一个度量标准,该度量可以用于度量对象的创建与对象的克隆。在您的示例中,您通过不同的机制创建对象,并在度量中寻找差异。

原型模式的目的是减少对象的创建时间,而不是编译器和字节代码的机制,而是避免通常执行的耗时操作。

例如,如果您的Employee对象需要正确实例化数据库调用,则可以使用原型模式来避免该调用。您仍然需要创建对象和设置值,正如您的代码所演示的那样,但是对象的逻辑初始化,即真正的数据,将短路。这就是节省时间的地方。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37612605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档