gpt4 book ai didi

Java: Action 作为对象?继承异常处理程序?

转载 作者:行者123 更新时间:2023-12-01 15:14:48 25 4
gpt4 key购买 nike

我是“命令”软件设计模式的新手,我在不知道自己在做什么的情况下尝试了它。我知道这对于 Stack Overflow 来说并不完全是一个合适的问题,但如果你看看我的来源,你会发现我的做法是正确的吗?我创建了在构造时执行其任务的对象(而父类(super class)处理任何引发的异常。)

(编辑#1:此源位于另一个类中,其字段包括“out”和“in”。)

public static interface Operations{
public void action(String filename)
throws FileNotFoundException, UnsupportedEncodingException, IOException;
}

public static abstract class Operator implements Operations{
public Operator(String filename){
try{
action(filename);
} catch(FileNotFoundException FNFE){
sessionLog.report(FNFE.toString());
} catch(UnsupportedEncodingException UEE){
sessionLog.report(UEE.toString());
} catch(IOException IOE){
sessionLog.report(IOE.toString());
} finally{

try{
out.close();
} catch(IOException IOE){
sessionLog.report("The file may not have closed properly. "+IOE.toString());
} catch(NullPointerException NPE){
//sessionLog.report("The file may be null.");
}
}
}
}

public static class Saver extends Operator{
public void action(String filename)
throws FileNotFoundException, UnsupportedEncodingException, IOException{
out = new OutputStreamWriter(new FileOutputStream(filename), ENCODE);
out.write("Spoons.");
}
public Saver(String filename){super(filename);}
}

public static class Opener extends Operator{
public void action(String filename)
throws FileNotFoundException, UnsupportedEncodingException, IOException{

in = new InputStreamReader(new FileInputStream(filename), ENCODE);
/* ... */
}
public Opener(String filename){super(filename);}
}

public static void save(String filename, ShoppingMutableTreeNode SMTN){
new Saver(filename);
}

public static void open(String filename){
new Opener(filename);
}

最佳答案

你的实现对我来说看起来很好。不过有一些建议:

我会去掉action()的文件名参数,因为它会让我做类似的事情

 new Saver("file1.txt").action("file2.txt");

我还会删除构造函数中的 action() 调用。我认为大多数开发人员不会在不深入研究源代码的情况下推断出构造函数正在执行实际操作 - 这看起来并不直观。像这样的事情会更明确:

 public abstract class Operation implements ... {
private String filename;

public Operation(String filename) { this.filename = filename; }

public abstract void execute();
}

然后你的代码就可以调用它

 new SaveAction("myfile.txt").execute();

关于命令模式的最后一句话 - 您在这里使用它来共享异常处理。这确实让我想起了Template模式。

该模式的力量实际上来自于这样一个事实:您拥有抽象操作并执行它们,而无需知道运行时它是什么确切的操作。以下是该模式的一些用途:http://en.wikipedia.org/wiki/Command_pattern#Uses

关于Java: Action 作为对象?继承异常处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781090/

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