设计模式 - 组合实体模式

栏目: IT技术 · 发布时间: 4年前

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

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

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

import "fmt"

type DependentObject1 struct {
	Data string
}

func (d *DependentObject1) SetData(data string) {
	d.Data = data
}

func (d *DependentObject1) GetData() string {
	return d.Data
}

type DependentObject2 struct {
	Data string
}

func (d *DependentObject2) SetData(data string) {
	d.Data = data
}

func (d *DependentObject2) GetData() string {
	return d.Data
}

type CoarseGrainedObject struct {
	Do1 *DependentObject1
	Do2 *DependentObject2
}

func NewCoarseGrainedObject(data1, data2 string) *CoarseGrainedObject {
	return &CoarseGrainedObject{
		Do1: &DependentObject1{},
		Do2: &DependentObject2{},
	}
}

func (c *CoarseGrainedObject) SetData(data1, data2 string) {
	c.Do1.SetData(data1)
	c.Do2.SetData(data2)
}

func (c *CoarseGrainedObject) GetData() []string {
	return []string{c.Do1.GetData(), c.Do2.GetData()}
}

type CompositeEntity struct {
	CoarseGrainedObject *CoarseGrainedObject
}

func NewCompositeEntity(data1, data2 string) *CompositeEntity {
	return &CompositeEntity{
		CoarseGrainedObject: NewCoarseGrainedObject(data1, data2),
	}
}

func (c *CompositeEntity) SetData(data1, data2 string) {
	c.CoarseGrainedObject.SetData(data1, data2)
}

func (c *CompositeEntity) GetData() []string {
	return c.CoarseGrainedObject.GetData()
}

type Client struct {
	CompositeEntity *CompositeEntity
}

func (c *Client) PrintData() {
	for i := 0; i < len(c.CompositeEntity.GetData()); i++ {
		fmt.Println("data: ", c.CompositeEntity.GetData()[i])
	}
}

func (c *Client) SetData(data1, data2 string) {
	c.CompositeEntity.SetData(data1, data2)
}

func main() {
	client := &Client{
		CompositeEntity: NewCompositeEntity("", ""),
	}
	client.SetData("test", "data")
	client.PrintData()
	client.SetData("second test", "data2")
	client.PrintData()
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

测试驱动开发

测试驱动开发

Kent Beck / 孙平平、张小龙 / 中国电力出版社 / 2004-4-1 / 28.00元

《测试驱动开发》(中文版)设想把编程看成是转动曲柄从井里提一桶水上来的过程。如果水桶比较小,那么仅需一个能自由转动的曲柄就可以了。如果水桶比较大而且装满水,那么还没等水桶全部被提上来你就会很累了。你需要一个防倒转的装置,以保证每转一次可以休息一会儿。水桶越重,防倒转的棘齿相距越近。测试驱动开发中的测试程序就是防倒转装置上的棘齿。一旦我们的某个测试程序能工作了,你就知道,它从现在开始并且以后永远都可......一起来看看 《测试驱动开发》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具