public void TestCompositeSum() { var singleValue = new SingleValue { Value = 11 }; var otherValues = new ManyValues(); otherValues.Add(22); otherValues.Add(33); Assert.That(new List <IValueContainer> { singleValue, otherValues }.Sum(), Is.EqualTo(66)); }
static void Main(string[] args) { var drawing = new GraphicObject { Name = "My drawing" }; drawing.Children.Add(new Square { Color = "Red" }); drawing.Children.Add(new Circle { Color = "Yellow" }); var group = new GraphicObject(); group.Children.Add(new Circle { Color = "Blue" }); group.Children.Add(new Square { Color = "Blue" }); drawing.Children.Add(group); Console.WriteLine(drawing); //// neuron and neuron layer var neuron1 = new Neuron(); var neuron2 = new Neuron(); neuron1.ConnectTo(neuron2); var layer1 = new NeuronLayer(); var layer2 = new NeuronLayer(); neuron1.ConnectTo(layer1); layer1.ConnectTo(layer2); // exercise IValueContainer sv = new SingleValue { Value = 1 }; IValueContainer mv = new ManyValues { 2, 3, }; var valueContainers = new List <IValueContainer> { sv, mv }; Console.WriteLine(valueContainers.Sum()); }
private static void Main(string[] args) { /* * In this example we are using composition pattern to create various GraphicObject objects * which can represent a single graphic object entity like a colored square, or circle OR a group * of graphic objects which contains multiple GraphicObjects inside. */ var drawing = new GraphicObject("My Super Drawing") .AddChildren(new Rectangle(Color.Blue)) .AddChildren(new Square(Color.Green).AddChildren(new Rectangle(Color.Yellow))); var group = new GraphicObject() .AddChildren(new Square(Color.Red)) .AddChildren(new Square(Color.Red)) .AddChildren(new Rectangle(Color.Yellow)); drawing.AddChildren(group); WriteLine(drawing); /* * In this exercise we use composite pattern to implement an extension method * which operates on all List<IValueContainer> types. IValueContainer provides * the required composite interface for a SingleValue or ManyValues classes to * implement so that they can all be treated as IEnumerable<int> implementations. * This way, whether it is a SingleValue, or ManyValues this extension method * will be able to calculate the sum of all values because the implementation uses * composite pattern. */ var manyValues = new ManyValues(); manyValues.Add(10); manyValues.Add(20); manyValues.Add(5); var list = new List <IValueContainer> { new SingleValue { Value = 5 }, new SingleValue { Value = 5 }, manyValues }; WriteLine(list.Sum()); }
static void Main(string[] args) { var mv = new ManyValues(); var mv2 = new ManyValues(); mv.Add(1); mv.Add(2); mv.Add(3); mv.Add(4); mv.Add(5); mv2.Add(6); mv2.Add(7); mv2.Add(8); mv2.Add(9); mv2.Add(10); var iValueContainerList = new List <IValueContainer>() { mv, mv2 }; Console.WriteLine(iValueContainerList.Sum()); }