4,原型模式(Prototype Pattern)实际上就是动态抽取当前对象运行时的状态。

原型模式(Prototype Pattern)  实际上就是动态抽取当前对象运行时的状态。

Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据

1)由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。

2)目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值

3)根据对象克隆深度层次的不同,有浅度克隆与深度克隆

适用情况: 一个复杂对象,具有自我复制功能,统一一套接口。 对于对象比较复杂,每创建一次new 都会浪费好多的资源和时间 且在初始化的信息不发生变化的前提下 克隆是最好的办法,

      隐藏了对象创建细节,对性能大大提高。

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <iostream>
 3 using namespace std;
 4 #include "string"
 5
 6 //人虚父类 虚的克隆函数
 7 class Person
 8 {
 9 public:
10     virtual Person* clone() = 0;
11     virtual void printT() = 0;
12 };
13 //CPP程序员 子类
14 class  CPlusPlusProgrammer : public Person
15 {
16 public:
17     CPlusPlusProgrammer()
18     {
19         m_name = "";
20         m_age = 0;
21         m_resume = NULL;
22         setResume("aaaa");
23     }
24     CPlusPlusProgrammer(string name, int age)
25     {
26         m_name = name;
27         m_age = age;
28         m_resume = NULL;
29         setResume("aaaa");
30     }
31     void setResume(char *p)
32     {
33         if (m_resume != NULL)
34         {
35             delete m_resume;
36         }
37         m_resume = new char[strlen(p) + 1];
38         strcpy(m_resume, p);
39     }
40
41
42     virtual void printT()
43     {
44         cout << "m_name" << m_name << " m_age" << m_age << "m_resume:" << m_resume <<  endl;
45     }
46     virtual Person* clone()
47     {
48         CPlusPlusProgrammer *tmp = new CPlusPlusProgrammer;
49         //tmp->m_name = this->m_name;
50         *tmp = *this; // =  浅拷贝 copy前后两个m_resume指针 指向了同一个内存
51         return tmp;   //如何修改为深入的copy 就是新开辟空间 把指针内容复制进去就行了 没有
52     }
53 protected:
54 private:
55     string    m_name;
56     int        m_age ;
57     char    *m_resume;
58
59 };
60
61 void main()
62 {
63     Person *c1 = new CPlusPlusProgrammer("张三", 32);
64     c1->printT();
65
66
67     Person *c2 = c1->clone();
68     c2->printT();
69
70     cout<<"hello..."<<endl;
71     system("pause");
72     return ;
73 }

这个也是不错的::::【http://blog.csdn.net/lcl_data/article/details/8764228

时间: 2024-10-05 18:31:49

4,原型模式(Prototype Pattern)实际上就是动态抽取当前对象运行时的状态。的相关文章

二十四种设计模式:原型模式(Prototype Pattern)

原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 示例有一个Message实体类,现在要克隆它. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Prototype { /// <summary> /// Message实体类 /// </summary> publi

设计模式(创建型)之原型模式(Prototype Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的.原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据. 原型模式要求对象实现一个可以"克隆"自身的接口,这样就可以通过

原型模式(Prototype Pattern)

用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的. 原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据. 原型模式中的拷贝分为"浅拷贝"和"深拷贝":浅拷贝: 对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.深拷贝:

Java设计模式四: 原型模式(Prototype Pattern)

网上找了好多这个模型的资料说的都不透彻,看了半天都是云里雾里.只好自己操刀研究一把. 原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的.原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据. 原型模式中的拷贝分为"浅拷贝"和"深拷贝":浅拷贝: 对值类型的成员变量进行值的复制,对引用类型

6.原型模式(Prototype Pattern)

using System; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { // 孙悟空 原型 MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing"); // 变一个 MonkeyKingPrototype cloneMonkeyKing = prototypeMonkey

设计模式(四)原型模式Prototype(创建型)

1.   概述 我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的new()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象. 例子1:孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来. 例子2:寄个快递下面是一个邮寄快递的场景:“给我寄个快递.”顾客说.“寄往什么地方?寄给……?”你问.“和上次差不多一样,只是邮寄给另外一个地址,这里是邮寄地址……”顾客一边说一边把

十四、原型模式Prototype(创建型模式)

1:原型模式的本质 原型模式的本质:克隆生成对象. 克隆是手段,目的还是生成新的对象实例.正是因为原型的目的是为了生成新的对象实例,原型模式通常是被归类为创建型的模式. 原型模式也可以用来解决"只知接口而不知实现的问题",使用原型模式,可以出现一种独特的"接口造接口"的景象,这在面向接口编程中很有用.同样的功能也可以考虑使用工厂来实现. 另外,原型模式的重心还是在创建新的对象实例,至于创建出来的对象,其属性的值是否一定要和原型对象属性的值完全一样,这个并没有强制规定

Design Patterns 5 原型模式 Prototype

原型模式 Prototype 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 当我们需要多个相同的类实例时,没必要每次都使用new运算符去创建相同的类实例对象,我们可以用原型模式减少内存的消耗和达到类实例的复用. //带有返回自身接口的抽象原型类 public abstract class Prototype5 { public string Id { get; set; } public Prototype5(string id) { this.Id = id;

[工作中的设计模式]原型模式prototype

一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.prototype.run=function(){ alert(this.name+" is running"; } 此处的原型是js的特殊定义,在原型上定义的属性和方法所有的类进行共享. 不过设计模式中的原型模式指的是:将已有的对象作为原型,拷贝出一份具有相同属性的新的对象. 模式定义为:原型