Композиция (шаблон)

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене
UML диаграма на шаблона Композиция.

Композиция (Composite) е структурен шаблон за дизайн, който се използва в обектно-ориентираното програмиране.


Съдържание

Примери[редактиране]

C++[редактиране]

C#[редактиране]

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
 
namespace CompositeDesignPattern
{
    //Стартиращия програмата клас
    class MainApp
    {
        ///главният стартиращ метод
        static void Main()
        {
            // Създай дървовидна структура  създавайки коренът
            Composite root = new Composite("root");
            root.Add(new Leaf("Leaf A"));
            root.Add(new Leaf("Leaf B"));
 
            //прибавите градивна единица / елемент
            Composite comp = new Composite("Composite X");
            comp.Add(new Leaf("Leaf XA"));
            comp.Add(new Leaf("Leaf XB"));
 
            //прибави го към коренния елемент
            root.Add(comp);
            root.Add(new Leaf("Leaf C"));
 
 
            // прибави и премахни листо от корена
            Leaf leaf = new Leaf("Leaf D");
            root.Add(leaf);
            root.Remove(leaf);
 
            // Рекурсивно предтави дървото
            root.Display(1);
 
            // Wait for user 
            Console.Read();
        }
    }
 
    // "Component" 
    abstract class Component
    {
        protected string name;
 
        // Constructor 
        public Component(string name)
        {
            this.name = name;
        }
 
        public abstract void Add(Component c);
        public abstract void Remove(Component c);
        public abstract void Display(int depth);
    }
 
    // "Composite" 
    class Composite : Component
    {
        private ArrayList children = new ArrayList();
 
        // Constructor 
        public Composite(string name)
            : base(name)
        {
        }
 
        public override void Add(Component component)
        {
            children.Add(component);
        }
 
        public override void Remove(Component component)
        {
            children.Remove(component);
        }
 
        public override void Display(int depth)
        {
            Console.WriteLine(new String('-', depth) + name);
 
            // Recursively display child nodes 
            foreach (Component component in children)
            {
                component.Display(depth + 2);
            }
        }
    }
 
    // "Leaf" 
    class Leaf : Component
    {
        // Constructor 
        public Leaf(string name)
            : base(name)
        {
        }
 
        public override void Add(Component c)
        {
            Console.WriteLine("Cannot add to a leaf");
        }
 
        public override void Remove(Component c)
        {
            Console.WriteLine("Cannot remove from a leaf");
        }
 
        public override void Display(int depth)
        {
            Console.WriteLine(new String('-', depth) + name);
        }
    }
}

Java[редактиране]