composite

package
v0.0.0-...-6db54d9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 15, 2021 License: MIT Imports: 0 Imported by: 0

README

Компоновщик (Composite)

Паттерн Composite относится к структурным паттернам уровня объекта.

Паттерн Composite группирует схожие объекты в древовидные структуры.

Для построения дерева будут использоваться массивы, представляющие ветви дерева.

Требуется для реализации:

  1. Базовый абстрактный класс Component который предоставляет интерфейс, как для ветвей, так и для листьев дерева;
  2. Класс Composite, реализующий интерфейс Component и являющийся ветвью дерева;
  3. Класс Leaf, реализующий интерфейс Component и являющийся листом дерева.

Обратите внимание, что лист дерева является классом листовых узлов и не может иметь потомков (из листа не может вырасти ветвь или другой лист).

Ветви дерева задают поведение объектов, входящих в структуру дерева, у которых есть потомки, а также сами хранит в себе компоненты дерева. Другим словами ветви могут содержать другие ветви и листья.

Основным назначением паттерна, является обеспечение единого интерфейса как к составному (ветви) так и конечному (листу) объекту, что бы клиент не задумывался над тем, с каким объектом он работает.

[!] В описании паттерна применяются общие понятия, такие как Класс, Объект, Абстрактный класс. Применимо к языку Go, это Пользовательский Тип, Значение этого Типа и Интерфейс. Также в языке Go за место общепринятого наследования используется агрегирование и встраивание.

-- THE END --

Documentation

Overview

Package composite is an example of the Composite Pattern.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Component

type Component interface {
	Add(child Component)
	Name() string
	Child() []Component
	Print(prefix string) string
}

Component provides an interface for branches and leaves of a tree.

type Directory

type Directory struct {
	// contains filtered or unexported fields
}

Directory implements branches of a tree

func NewDirectory

func NewDirectory(name string) *Directory

NewDirectory is constructor.

func (*Directory) Add

func (d *Directory) Add(child Component)

Add appends an element to the tree branch.

func (*Directory) Child

func (d *Directory) Child() []Component

Child returns child elements.

func (*Directory) Name

func (d *Directory) Name() string

Name returns name of the Component.

func (*Directory) Print

func (d *Directory) Print(prefix string) string

Print returns the branche in string representation.

type File

type File struct {
	// contains filtered or unexported fields
}

File implements a leaves of a tree

func NewFile

func NewFile(name string) *File

NewFile is constructor.

func (*File) Add

func (f *File) Add(child Component)

Add implementation.

func (*File) Child

func (f *File) Child() []Component

Child implementation.

func (*File) Name

func (f *File) Name() string

Name returns name of the Component.

func (*File) Print

func (f *File) Print(prefix string) string

Print returns the leave in string representation.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL