我对OOP中的委托设计原则有疑问。我将使用Window&来自GOF设计模式的Rectangle类示例解释了我的查询。
public class Window
{
Rectangle myDelegate;
public void Area()
{
return myDelegate.Area();
}
}
public class Rectangle
{
public int Area()
{
return 2*3;
}
}
我的问题是:Rectangle(委托)是否可以引用窗口(父类)。即:
public class Window
{
Rectangle myDelegate;
public int myArea;
public void Area()
{
myDelegate.Area();
}
}
public class Rectangle
{
Window myParent;
public void Area()
{
myParent.myArea = 2 * 3;
}
}
在非平凡的情况下,上面的代表可以更方便地更新父代的状态。 这是合乎逻辑的,还是我在这里遗漏了什么?
谢谢!
答案 0 :(得分:1)
维护单向引用要容易得多。在这种情况下,Window
向矩形询问其自身的尺寸并使用它来分配所需的空间是合适的。然后Rectangle
可以自由地在其空间中呈现自己。
答案 1 :(得分:0)
public interface IShape { void Area(); void SetArea(int area); } public class Window : IShape { private IShape rectangle; private int myArea; public Window(IShape shape) { rectangle = shape; } public void SetArea(int area) { myArea = area; } public void Area() { rectangle.Area(); } } public class Rectangle : IShape { private IShape window; public Rectangle(IShape shape) { window = shape; } public void Area() { SetArea(2 * 3); } public void SetArea(int area) { window.SetArea(area); } }
答案 2 :(得分:0)
如果那些是我的类,并且我需要委托与父进行通信,我将在委托上创建一个事件并将父进程设置为侦听器。这有几个好处: