gpt4 book ai didi

javascript - 我怎样才能减少这个功能的样板文件?

转载 作者:行者123 更新时间:2023-11-30 16:29:57 25 4
gpt4 key购买 nike

在我的 qooxdoo 应用程序中,我有 4 个按钮。登录、注销、注册和个人资料。每个按钮都有一个 Action 类。这些类是公共(public)抽象类的子类。通过使用命令模式,每次单击按钮时我都会调用相应类的执行函数。函数看起来像这样

    execute: function() {
var contentString = "login-form";
//do some generic stuff

if (win.getContentString() === contentString) {
//do some generic stuff

} else {
var content = new myapp.apps.userActions.SLoginForm();
//do some more generic stuff

}
}

执行函数必须在所有 4 个子类中实现,唯一改变的是变量 content 和 contentString。

我正在考虑使用工厂函数,每次都根据 contentString 变量返回适当的对象。

execute:function(){
var contentString = "login-form";
this.doTheGenericStuff(contentString);
},

doTheGenericStuff: function(contentString){
//do the generic stuff
var content = this.getTheObject(contentString);
//do some more generic stuff
},

getTheObject: function(contentString){
switch(contentString){
case "login-form":
return new myapp.apps.userActions.SLoginForm();
break;
case "register-form":
return new myapp.apps.userActions.SRegisterForm();
break;
//etc
}
}

虽然这看起来不错(还没有测试过),但我不太喜欢它,因为每次我添加新 Action 时我都必须更新工厂函数。有没有更聪明的方法来实现这一目标?也许我不知道 javascript 的某些功能?

最佳答案

我认为使用template method pattern在这种情况下更合适。

所以在你的抽象类上你有:

getMyContentString: function() { return "login-form"; //or any default value },

getMyContent: function() { return new myapp.apps.userActions.SLoginForm() },

execute: function() {
var contentString = getMyContentString(); // to be overridden
//do some generic stuff

if (win.getContentString() === contentString) {
//do some generic stuff

} else {
var content = getMyContent();
//do some more generic stuff

}
}

每个子对象只需要提供适当的getMyContentString()getMyContent()

关于javascript - 我怎样才能减少这个功能的样板文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33468068/

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