• 一种较安全的数据获取设计模式


    在编程中离不开对数据的获取与处理,本文介绍一种比较安全又比较简单的数据的获取方式,以C++为例,主要借助friend来完成。

    将涉及到数据的代码分为3类:数据类ClassData、数据的获取类ClassGetData、数据的使用者类ClassUseData。ClassGetData用于构造ClassData,供ClassUseData使用;ClassUseData对ClassData只有使用权,没有修改权。

    //数据类,包含较多属性
    class ClassData
    {
    public:
    	string GetName()//获取名称
    	{
    		return m_Name;
    	}
    	int GetAge()//获取年龄
    	{
    		return m_Age;
    	}
    			
    protected:
    	void SetName(const string&name)//设置名称
    	{
    		m_Name=name;
    	}
    	void SetAge(const int&age)//设置年龄
    	{
    		m_Age=age;
    	}
    
    	friend class ClassGetData;//如果不考虑继承,只有ClassGetData能访问Set方法
    private:
    	int m_Age;
    	string m_Name;
    };
    
    
    //获取数据的桥,从数据库Excel等源获取散列数据后,逐条构造ClassData对象,
    //通过ClassData的SetData方法设置对象的具体数据(名称 年龄),将所有ClassData对象存储到m_DataList,通过GetDataGroup供使用者使用
    class ClassGetData
    {
    public:
    	ClassGetData()
    	{
    		GenerateDataList();
    	}
    
    	void GetDataGroup(vector<ClassData>& vecData)
    	{
    		vecData=m_DataList;
    	}
    protected:
    private:
    	void GenerateDataList()
    	{
    		//从数据源获取散列数据
    		ClassData data1;//之所以不用构造函数直接传参,是因为数据往往不只是本例的2条简单数据
    		data1.SetName("data1");
    		data1.SetAge(1);
    		m_DataList.push_back(data1);
    
    		ClassData data2;
    		data2.SetName("data2");
    		data2.SetAge(2);
    		m_DataList.push_back(data2);
    
    	}
    	vector<ClassData> m_DataList;
    
    };
    
    
    //数据的使用者,通过ClassGetData获取数据的列表
    class ClassUseData
    {
    public:
    
    	void ToUseData()////获取及使用数据
    	{
    		vector<ClassData> vecData;
    
    		ClassGetData dataBridge;
    		dataBridge.GetDataGroup(vecData);
    		for (int i=0;i<vecData.size();i++)
    		{
    			int age=vecData[i].GetAge();
    			string name=vecData[i].GetName();
    			cout<<"name:"<<name<<",age:"<<age<<endl;
    
    			////只能从ClassData中获取具体数据,无法对ClassData数据进行更改,以下编译不过
    			//vecData[i].SetAge(age);
    			//vecData[i].SetName(name);
    		}
    	}
    
    protected:
    private:
    };
    
    void main()
    {
    	ClassUseData useData;
    	useData.ToUseData();
    }
    
  • 相关阅读:
    C#高级特性_Attribute
    C#高级特性_Lambda
    委托(delegate)
    C# 属性、索引
    C#中的interface
    枚举型Enum和结构型Stuct
    javascript学习笔记
    github page 和 hexo 搭建在线博客
    2015/9/22 开通博客园
    phoenix 入门
  • 原文地址:https://www.cnblogs.com/originalcandy/p/13992322.html
Copyright © 2020-2023  润新知