Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 理解原型模式_Design Patterns - Fatal编程技术网

Design patterns 理解原型模式

Design patterns 理解原型模式,design-patterns,Design Patterns,我有一个关于原型模式的问题 我读到原型模式是有效的,因为它复制对象而不是创建一个新的对象,这被认为是一个昂贵的操作 基于此,我尝试了一个样本,我看到了不同的结果。 我是用正确的方法检查的还是遗漏了什么 static void Main(string[] args) { var sw = new Stopwatch(); sw.Start(); Employee e; for (var i = 0; i < 10

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

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

基于此,我尝试了一个样本,我看到了不同的结果。 我是用正确的方法检查的还是遗漏了什么

    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;
    }
}
static void Main(字符串[]args)
{
var sw=新秒表();
sw.Start();
雇员e;
对于(变量i=0;i<100000;i++)
{
e=新员工(5,“sandesh”,27,“Bengaluru”);
e、 打印();
}
sw.Stop();
控制台写入线(“新:+sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
e=新员工(5,“sandesh”,27,“Bengaluru”);
对于(变量i=0;i<100000;i++)
{
var en=e.Clone();
en.Print();
}
sw.Stop();
Console.WriteLine(“克隆:+sw.ElapsedMilliseconds”);
Console.ReadLine();
}
公营雇员
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共整数{get;set;}
公共字符串Place{get;set;}
公共雇员(整数id、字符串名称、整数年龄、字符串位置)
{
Id=Id;
名称=名称;
年龄=年龄;
地点=地点;
}
公共雇员克隆()
{
返回(员工)此.MemberwiseClone();
}
公开作废印刷品()
{
var总和=Id*年龄;
var full=总和+姓名+地点;
}
}
结果如下: 第一次运行:- 新:18 克隆:26

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

第三次运行:- 新:20 克隆人:33

如果你能帮助我理解这个模式,我将不胜感激。
另外,创建一个新对象(克隆时不会发生这种情况)需要额外做些什么?

您似乎在寻找一个度量标准,用于衡量对象的创建与对象的克隆。在您的示例中,您正在通过不同的机制创建对象,并在度量中寻找差异

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


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

您似乎在寻找一个指标,用于衡量对象的创建与克隆。在您的示例中,您正在通过不同的机制创建对象,并在度量中寻找差异

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


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

你知道“高效”和“高效”的区别吗?找出你读到的文章中“有效”的含义。每当你说“我读”的时候,告诉我们你在哪里读的。然后有人可以检查你是否只是误解了,或者这篇文章是由一个无知的博主写的,或者它是否来自可靠的来源。我认为一般来说原型模式工作得更好,因为它不会创建对象。在我的例子中,情况并非如此。我走对了吗?或者你有什么建议吗?。而且任何我能看到好处的示例代码都会很有帮助。我读了这么多的文章,我不确定是否能找到那篇文章。但我仍然觉得这个问题是可以回答的:)你知道“有效”和“有效”的区别吗?找出你读到的文章中“有效”的含义。每当你说“我读”的时候,告诉我们你在哪里读的。然后有人可以检查你是否只是误解了,或者这篇文章是由一个无知的博主写的,或者它是否来自可靠的来源。我认为一般来说原型模式工作得更好,因为它不会创建对象。在我的例子中,情况并非如此。我走对了吗?或者你有什么建议吗?。而且任何我能看到好处的示例代码都会很有帮助。我读了这么多的文章,我不确定是否能找到那篇文章。但我仍然觉得这个问题是可以回答的:)啊!我没有理解最重要的部分——实时对象。谢谢你指出。啊!我没有理解最重要的部分——实时对象。谢谢你指出这一点。