提问人:Lana James 提问时间:3/21/2023 更新时间:3/21/2023 访问量:108
访客设计模式:我的访客可以返回 Promise 还是应该创建一个新界面
Visitor design pattern: can my visitor returns a Promise or should I create a new interface
问:
我现在使用的是 Visitor 模式,其中有 2 个访问者使用相同的接口返回 T。它基本上看起来像下面的架构,但我的访问者返回了一些东西。
我想更改我的一位访客的返回类型以返回 Promise。
我应该为这个问题创建一个新界面吗?
答:
0赞
Lana James
3/21/2023
#1
好的,我刚刚找到了这篇文章: Java - 同一类结构的多个访问者模式
我需要更改我的访客返回类型:
Visitor1<Type1>
和
Visitor2<Promise<Type2>>
1赞
Dennis Kats
3/21/2023
#2
如果你想利用,我认为创建一个名为 的新接口是有意义的。从某种意义上说,您实现的每个访问者都应该被视为类型枚举上自己的“虚拟”函数。但是,在 JavaScript 中,和是两种本质上不同类型的函数,其中后者可能会暂停执行,并且必须始终返回 .因此,使用一个访客接口来表示常规函数和异步函数是没有意义的。async/await
AsyncVisitor
Function
AsyncFunction
Promise
虽然你可以假设你的基于承诺的访客实现为just并且仍然有效,但你的接口会混合并被视为可互换的类型,如果你正在做某种元编程,这可能是意想不到的。Visitor<Promise<T>>
async/await
Function
AsyncFunction
换句话说,我认为您的界面应该如下所示:
interface Visitor<T> {
visitElementA(e: ElementA): T;
visitElementB(e: ElementB): T;
}
interface AsyncVisitor<T> {
visitElementAAsync(e: ElementA): Promise<T>;
visitElementBAsync(e: ElementB): Promise<T>;
}
interface Element {
accept<T>(v: Visitor<T>): T;
acceptAsync<T>(v: AsyncVisitor<T>): Promise<T>;
}
上一个:无双重调度的访客模式
评论