设计模式之原型模式
发布日期:2021-05-07 15:14:39 浏览次数:24 分类:原创文章

本文共 1374 字,大约阅读时间需要 4 分钟。

目录


原型模式(prototype)

概念

  • Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。
  • 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。
  • 目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。
  • 根据对象克隆深度层次的不同,有浅度克隆与深度克隆

角色和职责

  • 原型模式主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。
  • 适用情况:
    • 一个复杂对象,具有自我复制功能,统一一套接口。

案例

class Person{public:	virtual Person *Clone() = 0;	virtual void printT() = 0;};class JavaProgrammer : public Person{public:	JavaProgrammer()	{		this->m_name = "";		this->m_age = 0;		m_resume = NULL;	}	JavaProgrammer(string name, int age)	{		this->m_name = name;		this->m_age = age;		m_resume = NULL;	}	~JavaProgrammer()	{		if (m_resume!= NULL)		{			free(m_resume);			m_resume = NULL;		}	}	virtual Person *Clone()	{		JavaProgrammer *p = new JavaProgrammer;		*p = *this;		return p;	}	void setResume(char *resume)	{		m_resume = new char[strlen(resume) + 1];		strcpy(m_resume, resume);	}	virtual void printT()	{		cout << "m_name:" << m_name << "\t" << "m_age:" << m_age << endl;		if (m_resume != NULL)		{			cout << m_resume << endl;		}	}protected:private:	string	m_name;	int		m_age;	char	*m_resume;};void main(){	JavaProgrammer javaperson1("张三", 30);	javaperson1.setResume("我是java程序员");	Person *p2 = javaperson1.Clone();  //对象具有自我复制功能 注意深拷贝和浅拷贝问题	p2->printT();	delete p2;		cout<<"hello..."<<endl;	system("pause");	return ;}

【注】参考传智扫地僧C++设计模式

上一篇:设计模式之代理模式
下一篇:设计模式之建造者模式

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年03月24日 06时37分37秒