23种设计模式C++实例之原型模式

  • 原型模式:使用原型实例指定要创建对象的种类,并通过拷贝这些原型创建新的对象。
  • 主要角色:
    • 原型接口
    • 具体原型类
    • 客户端
#include <iostream>

using namespace std;

/*
 * 原型模式:让对象拥有自我复制的功能
 * 注意深拷贝和浅拷贝
 * */

class Programmer{
	public:
		virtual ~Programmer() {}
		virtual Programmer* clone() = 0;
		virtual void print() = 0;

};

class CProgrammer: public Programmer {
	public:
		CProgrammer() {
			m_name = "";
			m_age = 0;
			m_des = NULL;
		}
		CProgrammer(string name, int age, char* des) {
			m_name = name;
			m_age = age;
			m_des = new char[strlen(des) + 1];
			strcpy(m_des, des);
		}
		~CProgrammer() {
			if (m_des != NULL) {
				delete[] m_des;
				m_des = NULL;
			}
		}
		virtual Programmer* clone() {
			CProgrammer* tmp = new CProgrammer;
			// *tmp = *this;// 对象默认的赋值操作符,浅拷贝
			tmp->m_name = this->m_name;
			tmp->m_age = this->m_age;
			// 实现深拷贝
			tmp->m_des = new char[strlen(this->m_des) + 1];
			strcpy(tmp->m_des, this->m_des);
			return tmp;
		}

		virtual void print() {
			cout << m_name << endl;
			cout << m_age << endl;
			cout << m_des << endl;
		}
	private:
		string m_name;
		int m_age;
		char* m_des;
};

int main() {
	Programmer* p = new CProgrammer("Jun", 26, "C Programmer");
	p->print();

	Programmer* p2 = p->clone();
	p2->print();

	delete p;
	delete p2;

	return 0;
}

设计原则

创建模式(5种)

结构模式(7种)

行为模式(11种)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值