• 设计模式-原型模式


    原型模式Prototype):

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



        原型模式(也就是平时说的克隆)其实就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。这个模式估计是最简单的了,其实就是在讲深复制和浅复制,而且很多语言直接就已经支持深复制了。这个模式应用的地方通常是复杂耗时的初始化,比如说硬件获取什么的,可以用于在缓存里做临时版本复制等等。非常简单,但并不是没有价值。下面我用C++简单模拟一下上面那个UML所说的。
    原型模式实现代码:
    #pragma once
    
    #include <string.h>
    #include <iostream>
    
    using namespace std;
    
    #pragma warning(disable:4996)
    
    class CPrototypeInterface
    {
    public:
    	virtual CPrototypeInterface * Clone() = 0;
    	virtual void Show() = 0;
    };
    
    class CBodyA : public CPrototypeInterface
    {
    private:
    	char m_cCache[1024];
    	int m_nKey;
    public:
    	CBodyA()
    	{
    		memset(m_cCache ,sizeof(m_cCache) ,0);
    		m_nKey = 0;
    	}
    	void SetCache(char cCache[])
    	{
    		strcpy(m_cCache ,cCache);
    	}
    	void SetKey(int nKey)
    	{
    		m_nKey = nKey;
    	}
    	void Show()
    	{
    		cout<<m_cCache<<":"<<m_nKey<<endl;
    	}
    	CPrototypeInterface * Clone()
    	{
    		CBodyA *pNewBody = new CBodyA();
    		strcpy(pNewBody->m_cCache ,m_cCache);
    		pNewBody->m_nKey = m_nKey;
    		return pNewBody;
    	}
    };
    
    class CBodyB : public CPrototypeInterface
    {
    private:
    	char m_cCache[1024];
    	int m_nKey;
    public:
    	CBodyB()
    	{
    		memset(m_cCache ,sizeof(m_cCache) ,0);
    		m_nKey = 0;
    	}
    	void SetCache(char cCache[])
    	{
    		strcpy(m_cCache ,cCache);
    	}
    	void SetKey(int nKey)
    	{
    		m_nKey = nKey;
    	}
    	void Show()
    	{
    		cout<<m_cCache<<":"<<m_nKey<<endl;
    	}
    	CPrototypeInterface * Clone()
    	{
    		CBodyB *pNewBody = new CBodyB();
    		strcpy(pNewBody->m_cCache ,m_cCache);
    		pNewBody->m_nKey = m_nKey;
    		return pNewBody;
    	}
    };
    

    客户端调用代码:
    // TTT.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "Prototype.h"
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
    	CPrototypeInterface *pHashMemory[10] = {0};
    	int nHashId = 0;
    
    	CBodyA *pBodyA = new CBodyA();
    	pBodyA->SetCache("AAAAA");
    	pBodyA->SetKey(1);
    
    	CBodyB *pBodyB = new CBodyB();
    	pBodyB->SetCache("BBBBB");
    	pBodyB->SetKey(2);
    
    	CPrototypeInterface *pBodyAA = pBodyA->Clone();
    	pBodyAA->Show();
    	CPrototypeInterface *pBodyBB = pBodyB->Clone();
    	pBodyBB->Show();
    	
    	delete pBodyA;
    	delete pBodyB;
    	delete pBodyAA;
    	delete pBodyBB;
    	return 0;
    }
    

    运行结果:

    比较简答,就不多说了。



  • 相关阅读:
    PHP 类中的魔术方法
    C# Redis Server分布式缓存编程 网络转载
    CSS的position属性:relative和absolute
    会话控制——Cookie和Session
    HTTP协议
    常见浏览器兼容性问题与解决方案
    for循环0,1,1,2,2可以组成多少个不重复的五位数?
    单例模式
    第二周作业影评、靶机和攻击机的安装与配置、kali的配置、DNS解析
    20169206 201620172 《网络攻防实践》第六周学习总结
  • 原文地址:https://www.cnblogs.com/csnd/p/12062351.html
Copyright © 2020-2023  润新知