戲說原型模式(C++實現)之如何快速創建一個“對象”

介紹一下

原型模式(Prototype Pattern)是用於創建重複的對象,同時又能保證性能。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。還要再具體的就去菜鳥教程看吧——原型模式|菜鳥教程
這裏說說我自己的感悟,當一個類有很多屬性的時候,你又不太熟悉其屬性,這個時候創建一個對象還要填充屬性值就有點麻煩了。
那怎麼辦呢?直接克隆一個現成的吧,我纔不管它有哪些屬性,既然它已經存在了而我又想要對象,那就把它拿過來給我克隆出一個一模一樣的來,然後它也是我的了hhhhhhhhh。
再結合數據庫來說說,我們都知道讀數據庫是一種比較消耗CPU的操作,可是程序運行時又時不時的需要讀取數據庫裏面的數據鴨,這個時候我們就在程序運行的開始將數據庫初始化到內存來吧,以後要創建對象什麼的都直接來讀取最初創建的內存數據就ojbk了。
這樣說可能有點抽象了,那下面就結合UML圖和代碼來娓娓道來吧!

UML圖

這裏寫圖片描述
gril是一個抽象類,具體想要什麼樣的gril自己實現去吧,而我想要甜甜的女孩子,狗頭.jpg

CODE

girl.h

#ifndef _GIRL_
#define _GIRL_

#include <string>
#include <iostream>

using namespace std;

class girl
{
public:
	int m_height;
	int m_weight;
	string m_face;
	string m_character;
	virtual girl* clone() = 0;
	virtual void display() = 0;
};

class sweet_girl:public girl
{
public:
	sweet_girl(int height, int weight, string face, string character)
	{
		m_height = height;
		m_weight = weight;
		m_face = face;
		m_character = character;
	}
	sweet_girl(const girl* her)
	{
		m_height = her->m_height;
		m_weight = her->m_weight;
		m_face = her->m_face;
		m_character = her->m_character;
	}
	girl* clone()
	{
		return new sweet_girl(*this);
	}
	void display()
	{
		cout << "there is a " <<  m_height << "cm," << m_weight;
		cout << "kg," << m_face << "," << m_character << " girl of me." << endl;
	}
};

#endif

prototype_mode.cpp

#include "girl.h"
#include "iostream"

using namespace std;

int main(int argc, char const *argv[])
{
	//y是一個已經存在的對象,但她不是我的
	girl *y = new sweet_girl(164, 46, "cute face", "sweet");
	//可是我又想要,那怎麼辦呢?直接把她拿過來吧
	girl *my_girl = y->clone();
	my_girl->display();
	//這種對象反正我纔不要釋放,而且我纔不會讓程序結束,讓系統來回收資源,微笑.jpg
	while(1); 
	return 0;
}

運行結果

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章