【问题标题】:Parent child class relationship design pattern父子类关系设计模式
【发布时间】:2010-04-13 15:45:10
【问题描述】:

我有一个包含子项目列表的类。是否有可以复制的设计模式应用于这些类,以便我可以从子级访问父级实例,并且它强制执行诸如不能将子级添加到多个父级等规则?

【问题讨论】:

    标签: c# .net design-patterns


    【解决方案1】:

    尝试复合设计模式:

    https://www.dofactory.com/net/composite-design-pattern

    要使用它,您必须添加一些代码以将树向上移动到它看起来像的父级,但除此之外它应该可以工作。

    只需添加一个属性,该属性在将父元素添加到树时保存对它的引用。如果父节点发生变化,则更新它,如果节点被删除,则将其设置为 null。

    【讨论】:

      【解决方案2】:

      可能是这样的吗?

      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;}
      }
      

      【讨论】:

        【解决方案3】:

        例如,您可以在任何语言的分层字典的帮助下使用复合设计模式来实现父(面板)子(按钮)关系!这是示例 python 代码。

        面板 = DictObject('面板') 按钮= window.addChild('按钮') textfield = button.addChild('Text')

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-03
          • 1970-01-01
          • 1970-01-01
          • 2011-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多