返回信息流看了回复,发现我表述的有问题,所以修改一下
A,B,C...是不同类的各一个实例,get方法也是不同,例如A的get方法可能是getA,B的get方法是getB等。
并且这种get是按照A,B,C等顺序执行下来。
然后寻求一种符合这种场景需求的设计模式,java语言哈,别的语言不会而且项目开发就是java语言~
//////////以下为原文////////////////
代码内容:
if (A.get(id) != null) return A.get(id);
if (B.get(id) != null) return B.get(id);
if (C.get(id) != null) return C.get(id);
...
return error;
像上面这种if-else的逻辑,比较适合用哪种设计模式?设计模式这方面经验比较少,求指导
这是一条镜像帖。来源:北邮人论坛 / java / #52558同步于 2016/8/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
if-else用设计模式替代
yxcbluesky
2016/8/24镜像同步29 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
假设A,B,C都是一个类T的实例,T有get方法。
for (T x: new T[]{A,B,C}) {
if (x.get(id) != null) return x.get(id)
}
return error;
顺便安利一下Scala语言:
class T {
def get(id: Int): Option[U] = ...
}
val a = new T
val b = new T
val c = new T
return a.get(id) getOrElse b.get(id) getOrElse c.get(id) getOrElse error
//或者
return Stream(a,b,c).map(_.get(id)).flatten.headOption.getOrElse(error)
//或者按Java那么做
顺便安利一下Haskell
things = [Nothing, Just 1, Nothing, Just 2, Nothing]
result = head (catMaybes things ++ [error "This is an error]) -- 结果是1
暖神可以换回原来的头像么,看的我都方了~。。。
【 在 nuanyangyang 的大作中提到: 】
: 假设A,B,C都是一个类T的实例,T有get方法。
: [code=java]
: for (T x: new T[]{A,B,C}) {
: ...................
如果非得用设计模式,搞个chain handler来做,前提是你返回的都是一个公共父类或者接口。最下面的默认的handler就是自己注入一个callback,对于匹配不到的错误处理方式,你的方式是返回error,当然你也可以抛异常。
如果你想做POJO的mapping,可以看看这个https://github.com/neoremind/easy-mapper
【 在 shangpengfei 的大作中提到: 】
: ruby:
: [a, b, c].detect(&:id).id
: 或
: ...................
第二种不是懒惰的。