gpt4 book ai didi

design-patterns - 隔离父对象数组中包含的子对象方法的最佳设计模式

转载 作者:行者123 更新时间:2023-12-04 07:18:49 26 4
gpt4 key购买 nike

我正在尝试找出最佳的设计模式,以防止子对象过多了解其所包含的父对象。

例如,使用这样的父类......

class Airplane {  var seats:Array  ...  function removeSeat(seat:Seat) {    // find seat object in seats array and remove it  }}

child 类...

class Seat {  var rowNumber:int  ...}

如果我在 Seat 对象的上下文中工作,并且想将自己从父 Airplane 对象中删除,那么将 Seat 与了解它在 Airplane.seats 数组中的位置分开的最佳方法是什么?

我知道我可以将 Airplane 父对象传递到 Seat 的构造函数中,然后调用 Airplane 上的 removeSeat 方法来删​​除该 Seat,但如果可能的话,我希望 Seat 对 Airplane 的了解尽可能少。有什么想法吗?

最佳答案

您可以使用事件处理程序模式 - 本质上,飞机在构造时将“removeMe”回调传递到座位中。当席位想要被移除时,就会执行这个回调。座位不知道谁传入了回调 - 它只需要知道回调的签名,在本例中,第一个参数是对 Seat 对象的引用。

例如伪代码

class Airplane {
// will be passed in as callback
function removeSeat(seat) {
array.remove(seat);
}
..
var seat = new Seat();
seat.removeCallback = removeSeat;
..
}

class Seat() {
removeCallback = null;
...
...
// when we want to remove the seat, run the callback if set
if (removeCallback !== null) {
removeCallback(this);
}
}

关于design-patterns - 隔离父对象数组中包含的子对象方法的最佳设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com