设计模式【组合实体模式CompositeEntityPattern】

来源:互联网 发布:it岗位职责 编辑:程序博客网 时间:2024/05/22 03:49

组合实体模式

组合实体模式(Composite Entity Pattern)的参与者有:

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

实现

我们将创建作为组合实体的 CompositeEntity 对象。CoarseGrainedObject 是一个包含依赖对象的类。

CompositeEntityPatternDemo,我们的演示类使用 Client 类来演示组合实体模式的用法。

组合实体模式的 UML 图

创建依赖对象

DependentObject1.cs

namespace CompositeEntityPattern{    class DependentObject1    {        private string data;        public void setData(string data)        {            this.data = data;        }        public string getData()        {            return data;        }    }}

DependentObject2.cs

namespace CompositeEntityPattern{    class DependentObject1    {        private string data;        public void setData(string data)        {            this.data = data;        }        public string getData()        {            return data;        }    }}

创建粗粒度对象

CoarseGrainedObject.cs

namespace CompositeEntityPattern{    class CoarseGrainedObject    {        DependentObject1 do1 = new DependentObject1();        DependentObject2 do2 = new DependentObject2();        public void setData(string data1, string data2)        {            do1.setData(data1);            do2.setData(data2);        }        public string[] getData()        {            return new string[] { do1.getData(), do2.getData() };        }    }}

创建组合实体

CompositeEntity.cs

namespace CompositeEntityPattern{    class CompositeEntity    {        private CoarseGrainedObject cgo = new CoarseGrainedObject();        public void setData(string data1, string data2)        {            cgo.setData(data1, data2);        }        public string[] getData()        {            return cgo.getData();        }    }}

创建使用组合实体的客户端类

Client.cs

using System;namespace CompositeEntityPattern{    class Client    {        private CompositeEntity compositeEntity = new CompositeEntity();        public void printData()        {            for (int i = 0; i < compositeEntity.getData().Length; i++)            {                Console.WriteLine("Data: " + compositeEntity.getData()[i]);            }        }        public void setData(string data1, string data2)        {            compositeEntity.setData(data1, data2);        }    }}

演示用法

使用 Client 来演示组合实体设计模式的用法。

CompositeEntityPatternDemo.cs

using System;namespace CompositeEntityPattern{    class CompositeEntityPatternDemo    {        static void Main(string[] args)        {            Client client = new Client();            client.setData("Test", "Data");            client.printData();            client.setData("Second Test", "Data1");            client.printData();            Console.Read();        }    }}

验证输出

Data: TestData: DataData: Second TestData: Data1