设计模式(C++实现)(十七)——原型模式

示例问题:

实现一个类的时候,通常会重载运算符“=”,然后可以将同一个类的对象用“=”赋值给另外一个对象。这实际上这就是原型模式的一种应用了(原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。)下面就阐述下重载运算符“=”(使用原型模式)带来的好处。

未重载运算符“=”(未使用原型模式):

UnProtoType.h

#pragma once

#include <string>
#include <iostream>

class CPerson
{
public:
	CPerson()
	{

	}

	virtual ~ CPerson()
	{

	}

	void SetName(std::string strName)
	{
		m_strName = strName;
	}

	void SetAge(int iAge)
	{
		m_iAge = iAge;
	}

	void Show()
	{
		std::cout << "姓名 : " << m_strName << std::endl;
		std::cout << "年龄 : " << m_iAge << std::endl;
		std::cout << std::endl;
	}

private:
	std::string m_strName;
	int m_iAge;
};

main.cpp

// main.cpp : Defines the entry point for the console application.
//

#include "ProtoType.h"


int main()
{
    CPerson Person1;
    Person1.SetName("张三");
    Person1.SetAge(12);
    Person1.Show();

    CPerson Person2;
    Person2.SetName("张三");
    Person2.SetAge(12);
    Person2.Show();

    system("pause");
    return 0;
}

运行结果

通过这种方式要产生多个“张三”,则需要创建多个人的对象并分别给这个人赋值姓名和年龄,如果需要修改张三的年龄,则需要修改多处。

重载运算符“=”(使用原型模式):

ProtoType.h

#pragma once

#include <string>
#include <iostream>

class CPerson
{
public:
	CPerson()
	{

	}

	virtual ~ CPerson()
	{

	}

	CPerson& operator= (const CPerson& Other)
	{
		if (this == &Other)
		{
			return *this;
		}
		m_strName = Other.m_strName;
		m_iAge = Other.m_iAge;
		return *this;
	}

	void SetName(std::string strName)
	{
		m_strName = strName;
	}

	void SetAge(int iAge)
	{
		m_iAge = iAge;
	}

	void Show()
	{
		std::cout << "姓名 : " << m_strName << std::endl;
		std::cout << "年龄 : " << m_iAge << std::endl;
		std::cout << std::endl;
	}

private:
	std::string m_strName;
	int m_iAge;
};

main.cpp

// main.cpp : Defines the entry point for the console application.
//

#include "ProtoType.h"


int main()
{
	CPerson Person1;
	Person1.SetName("张三");
	Person1.SetAge(12);
	Person1.Show();

	CPerson Person2 = Person1;;
	Person2.Show();

	system("pause");
    return 0;
}

运行结果:

由于重载了运算符“=”,可以用赋值的方式,将对象赋值给另外一个对象。这样当存在多个“张三”时,如果需要修改张三的年龄,则只需修改Person1的年龄即可。

原型模式的使用:

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

原型模式其实就是从一个对象再创建另外一个对象,而且需要知道任何创建的细节。

当一个类的实例只能有几个不同状态组合中的一种,且需要多个同样的对象时,通过克隆比每次用合适的状态手工实例化该类更方便,更不易出错。

何时使用原型模式:

1. 当一个类的实例只能有几个不同状态组合中的一种,且需要多个同样的对象时。

2. 当一个系统应该独立于他的产品创建、构成和表示时,需要使用原型模式。

 

返回目录:设计模式(C++实现)(总)

上一篇:设计模式(C++实现)(十六)——策略模式

下一篇:设计模式(C++实现)(十八)——外观模式

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值