设计模式——组合实体模式(C++实现)

组合实体模式简介

        组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。

  • 组合实体(Composite Entity) - 它是主要的实体 bean。它可以是粗粒的,或者可以包含一个粗粒度对象,用于持续生命周期。
  • 粗粒度对象(Coarse-Grained Object) - 该对象包含依赖对象。它有自己的生命周期,也能管理依赖对象的生命周期。
  • 依赖对象(Dependent Object) - 依赖对象是一个持续生命周期依赖于粗粒度对象的对象。
  • 策略(Strategies) - 策略表示如何实现组合实体。
  •  

采用菜鸟教程的例子,这里用C++实现

#include<iostream>
#include<string>

using namespace std;
//组合实体模式

//创建依赖对象DependentObject1类
class DependentObject1
{
public:
	DependentObject1() {};
	~DependentObject1() {};
	void setData(string data);

	string getData();

private:
	string data;
};

void DependentObject1::setData(string data)
{
	this->data = data;
}

string DependentObject1::getData()
{
	return data;
}

//创建依赖对象DependentObject2类
class DependentObject2
{
public:
	DependentObject2() {};
	~DependentObject2() {};
	void setData(string data);

	string getData();

private:
	string data;
};


void DependentObject2::setData(string data)
{
	this->data = data;
}

string DependentObject2::getData()
{
	return data;
}

//创建创建粗粒度对象CoarseGrainedObject类
class CoarseGrainedObject
{
public:
	CoarseGrainedObject();
	~CoarseGrainedObject();
	void setData(string data1, string data2);
	string getData(); //返回string数组

private:
	DependentObject1 *ob1;
	DependentObject2 *ob2;
};

CoarseGrainedObject::CoarseGrainedObject()
{
	ob1 = new DependentObject1();
	ob2 = new DependentObject2();
}
CoarseGrainedObject::~CoarseGrainedObject()
{
	delete ob1;
	ob1 = NULL;
	delete ob2;
	ob2 = NULL;
}
void CoarseGrainedObject::setData(string data1, string data2)
{
	this->ob1->setData(data1);
	this->ob2->setData(data2);
}

string CoarseGrainedObject::getData()
{
	return this->ob1->getData()+"\n"+this->ob2->getData();
}
//创建组合实体CompositeEntity类
class CompositeEntity
{
public:
	CompositeEntity();
	~CompositeEntity();
	void setData(string data1, string data2);
	string getData(); //返回string数组

private:
	CoarseGrainedObject *cgob;
};

CompositeEntity::CompositeEntity()
{
	cgob = new CoarseGrainedObject();
}
CompositeEntity::~CompositeEntity()
{
	delete cgob;
	cgob = NULL;
}
void CompositeEntity::setData(string data1, string data2)
{
	this->cgob->setData(data1, data2);
}

string CompositeEntity::getData()
{
	return this->cgob->getData();
}

//创建使用组合实体的客户端类
class Client
{
public:
	Client();
	~Client();
	void setData(string data1, string data2);
	void printData(); 

private:
	CompositeEntity *ce;
};

Client::Client()
{
	ce = new CompositeEntity();
}
Client::~Client()
{
	delete ce;
	ce = NULL;
}
void Client::setData(string data1, string data2)
{
	this->ce->setData(data1, data2);
}

void Client::printData()
{
	cout << this->ce->getData() << endl;
}



int main()
{
	Client *t1 = new Client();
	t1->setData("Test", "Data");
	t1->printData();

	t1->setData("Second Test", "Data1");
	t1->printData();

	delete t1;
	t1 = NULL;

	system("pause");
	return 0;
}

在visual studio 2015上运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值