作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
组合实体模式
组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。
- 组合实体(Composite Entity) - 它是主要的实体 bean。它可以是粗粒的,或者可以包含一个粗粒度对象,用于持续生命周期。
- 粗粒度对象(Coarse-Grained Object) - 该对象包含依赖对象。它有自己的生命周期,也能管理依赖对象的生命周期。
- 依赖对象(Dependent Object) - 依赖对象是一个持续生命周期依赖于粗粒度对象的对象。
策略(Strategies) - 策略表示如何实现组合实体。
UML结构图
代码实现
dependentobject1.h
创建依赖对象1
#include <string>
using namespace std;
class DependentObject1
{
public:
void setData(string data)
{
this->data = data;
}
string getData()
{
return data;
}
private:
string data;
};
dependentobject2.h
创建依赖对象2
#include <string>
using namespace std;
class DependentObject2
{
public:
void setData(string data)
{
this->data = data;
}
string getData()
{
return data;
}
private:
string data;
};
coarsegrainedobject.h
创建粗粒度对象
#include "dependentobject1.h"
#include "dependentobject2.h"
#include <vector>
class CoarseGrainedObject
{
public:
CoarseGrainedObject()
{
do1 = new DependentObject1();
do2 = new DependentObject2();
}
void setData(string data1, string data2)
{
this->do1->setData(data1);
this->do2->setData(data2);
}
vector<string> getData()
{
vector<string> vec;
vec.push_back(do1->getData());
vec.push_back(do2->getData());
return vec;
}
private:
DependentObject1 *do1;
DependentObject2 *do2;
};
compositeentity.h
创建组合实体
#include "coarsegrainedobject.h"
class CompositeEntity
{
public:
CompositeEntity()
{
cgo = new CoarseGrainedObject();
}
void setData(string data1, string data2)
{
cgo->setData(data1, data2);
}
vector<string> getData()
{
return cgo->getData();
}
private:
CoarseGrainedObject *cgo;
};
client.h
创建使用组合实体的客户端类
#include "compositeentity.h"
#include <iostream>
class Client
{
public:
Client()
{
compositeEntity = new CompositeEntity();
}
void printData()
{
for (auto it : compositeEntity->getData())
{
cout << "Data: " << it << endl;
}
}
void setData(string data1, string data2)
{
compositeEntity->setData(data1, data2);
}
private:
CompositeEntity *compositeEntity;
};
main.cpp
实例应用 - 使用 Client 来演示组合实体设计模式的用法
#include "client.h"
int main()
{
Client *client = new Client();
client->setData("Test", "Data");
client->printData();
client->setData("Second Test", "Data1");
client->printData();
return 0;
}
运行结果:
Data: Test
Data: Data
Data: Second Test
Data: Data1