Шаблон проектирования отношений родительского класса - PullRequest
3 голосов
/ 13 апреля 2010

У меня есть класс, в котором есть список дочерних элементов. Есть ли шаблон дизайна, который я могу скопировать, который можно применить к этим классам, чтобы я мог получить доступ к родительскому экземпляру от ребенка, и он применяет правила, такие как невозможность добавить ребенка к нескольким родителям и т. Д.?

Ответы [ 3 ]

2 голосов
/ 13 апреля 2010

Попробуйте шаблон составного дизайна:

http://www.dofactory.com/Patterns/PatternComposite.aspx

Чтобы использовать это, вам нужно добавить некоторый код для перемещения вверх по дереву к родительскому элементу, на который он похож, но кроме этого он должен работать.

Просто добавьте свойство, которое содержит ссылку на родительский элемент, когда он добавляется в дерево. Обновите его, если родитель изменился, и установите его в нуль, если узел удален.

1 голос
/ 13 апреля 2010

Что-то вроде этого может быть?

public class Parent
{
   public Parent()
   {
     _children = new List<Child>();
    }

   private IList<Child> _children;
   public IEnumerable<Child> Children
   {
     get
     {
       return _children;
     }
   }

   public void Add(Child child)
{
    if (_children.Contains(child)) return;
    if (child.Parent != null && child.Parent !=this) throw new Exception ("bla bla bla");
    _children.Add(child);
    child.Parent = this;
}

public void Remove (Child child)
{
   child.Parent = null;
   _children.Remove(child)
{

}

public class Child
{
  public Parent Parent
  {
     get { return _parent;}
     protected internal set { _parent = value;}
}
0 голосов
/ 13 апреля 2010

Например, вы можете реализовать отношения родитель (панель), дочерний элемент (кнопка), используя составной шаблон проектирования с помощью иерархических словарей на любом языке! Вот пример кода Python.

панель = DictObject («панель») button = window.addChild ('button') textfield = button.addChild ('Text')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...