如何实现这样的工作流

yoken 2003-05-23 09:26:39
我想实现如下功能:
一个类里有方法
public boolean f1()
public boolean f2()
.
.
.
另外有方法f(),在f()中顺序执行f1(),f2()...,但如果其中某个fn()执行返回false,
则fn()之后的fn+1(),fn+2()...都不执行,
java中有现成的api实现这个功能吗,如果没有,请各位写出程序,谢谢
...全文
47 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
onefox 2003-07-10
  • 打赏
  • 举报
回复
◎(#※×¥ 错了!这样
public void f() {
switch(0) {
case 1:
if( !f1() ) break;
case 2:
if( !f2() ) break;
case 3:
if( !f3() ) break;
……
……
}
}
onefox 2003-07-10
  • 打赏
  • 举报
回复
public void f() {
switch(0) {
case 1:
if(f1()) break;
case 2:
if(f2()) break;
case 3:
if(f3()) break;
……
……
}
}
dayn9 2003-07-10
  • 打赏
  • 举报
回复
to SureBeiJing(自由自在)

Mediator的本意是降低对象的网状耦合,在和这里的目标不太一直,不过其形式到是可以借鉴的,大概也是一种灵活运用吧。

to 楼主:

sorry,一言难尽,如果完全解释清楚至少要上千字。工作流中涉及到许多模式的运用,所以建议你去看看设计模式的书,肯定会受益无穷。经典的有《设计模式》(难!),通俗的有《java与模式》(初学建议)。届时,有什么不解的地方,我们可以共同探讨。
yoken 2003-07-08
  • 打赏
  • 举报
回复
我所说的f1,f2...并非实际方法名,只是为了说明问题省点事,实际方法名是没有规律的
dayn9(无知者无罪)能否详细阐述一下
“工作流中的链状方法调用,抽象为责任链模式可能较妥当。”
SureBeiJing(自由自在) 能否详细阐述一下
“在责任呈现水平而非垂直状态的情况下,使用Mediator模式,或许更好”
谢谢
SureBeiJing 2003-07-08
  • 打赏
  • 举报
回复
dayn9(无知者无罪)
--
Goog idea!
我也有一个想法,在责任呈现水平而非垂直状态的情况下,使用Mediator模式,或许更好。大家认为呢?
dayn9 2003-07-08
  • 打赏
  • 举报
回复
一点质疑,见谅。

1.如果一个真实的类里的方法取名为f1,f2...这应该是一个糟糕的设计。

2.如果程序过多使用invoke,恐怕显得花巧有余而稳健不足。

3.工作流中的链状方法调用,抽象为责任链模式可能较妥当。
yefc 2003-07-07
  • 打赏
  • 举报
回复
onefox(一品狐) 是已经反朴归真的高手


yoken 2003-07-07
  • 打赏
  • 举报
回复
up
copyright 2003-05-25
  • 打赏
  • 举报
回复
看你的昵称还不错。就帮你实现,具体请看api文档

/*
* Created on 2003-5-25
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/

/**
* @author youyongming
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import java.lang.reflect.*;

public class test1 {
private int number = 5;
public Integer f1()
{
System.out.println("f1");
return new Integer(1);
}
public Integer f2()
{
System.out.println("f2");
return new Integer(1);
}
public Integer f3()
{
System.out.println("f3");
return new Integer(1);
}
public Integer f4()
{
System.out.println("f4");
return new Integer(0);
}
public Integer f5()
{
System.out.println("f5");
return new Integer(0);
}
public static void main(String[] args)
{
try{//载入该类
Class c = Class.forName("test1");
//循环五次
for (int i=1; i <= 5; i++)
{
//找到方法映射
Method m = c.getMethod("f"+i, null);
//调用函数
Integer ii = (Integer)m.invoke(c.newInstance(), null);
//如果返回false则跳出循环
if (ii.intValue() == 1)
continue;
else
break;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

onefox 2003-05-25
  • 打赏
  • 举报
回复
可以用 switch 语句啊 很简单

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧