如何在没有构建方法的情况下自动返回带有Builder模式的最后一个链接方法之后的值



如果是最后一个链接方法,我希望我的方法返回值,而不是类实例。

例如,通常我们有这样的:

class MyClass {
constructor(){
this.value = 0;
}
plus(amount){
this.value += amount;
return this;
}
minus(amount){
this.value -= amount;
return this;
}
getNumber(){
return this.value;
}
}

但我想要这样的东西:

class MyClass {
constructor(){
this.value = 0;
}
plus(amount){
this.value += amount;
if(isLastMethod){    // How do I know if that's the last method ?
return this.value;
} else{
return this;
}
}
minus(amount){
this.value -= amount;
if(isLastMethod){
return this.value;
} else{
return this;
}
}
}

如果我可以对返回的值调用更多的方法,那会更好,但至少这种基于方法是否最后一个的条件返回会很棒。

因为我们不知道它是否是最后一个方法,但我们可以添加参数returnValue来从该方法中获取值,如果您想立即获取值,则可以将其设置为true:

class MyClass {
constructor(){
this.value = 0;
}
plus(amount, returnValue){
this.value += amount;
if (returnValue)
return this.value
return this;
}
minus(amount, returnValue){
this.value -= amount;
if (returnValue)
return this.value
return this;
}
getNumber(){
return this.value;
}
}

这里可以看到一个例子:

class MyClass {
constructor(){
this.value = 0;
}
plus(amount, returnValue){
this.value += amount;
if (returnValue)
return this.value
return this;
}
minus(amount, returnValue){
this.value -= amount;
if (returnValue)
return this.value
return this;
}
getNumber(){
return this.value;
}
}
let myClass = new MyClass();
let value = myClass.plus(8).minus(1, true)
console.log(value)

您可以通过这种方式创建这样的生成器

function builderMyClass(builderFunc) {
const myClass = new MyClass();
const builder = {
plus: (value) => {
myClass.plus(value);
return builder;
},
minus: (value) => {
myClass.minus(value);
return builder;
},
};
builderFunc(builder);
return myClass.getNumber();
}

以及使用

const result = builderMyClass((builder) => 
builder
.plus(5)
.minus(4)
.plus(1)
);

相关内容

  • 没有找到相关文章

最新更新