组合实体模式简介
组合实体模式(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上运行结果: