我试图了解如何以一种干净且“可设计”的方式避免重复输入以下场景:
public interface ICommandAble
{ }
public interface ILogAble extends ICommandAble
{ }
public interface IMonitorAble extends ICommandAble
{ }
public abstract class ClassAbs
{ }
public class A extends ClassAbs implements IMonitorAble, ILogAble
{ }
测试方法:
public void test()
{
A a=new A();
List<ICommandAble>commandList=new ArrayList<ICommandAble>()
if (a instanceof ILogAble)
{
ILogAble logAbleItem=(ILogAble)a;
commandList.add(logAbleItem);
}
if (a instanceof IMonitorAble) {
IMonitorAble monitorAbleItem=(IMonitorAble)a;
commandList.add(monitorAbleItem);
}
for(ICommandAble item: commandList)
{
if(item instanceof IMonitorAble)
{
log.debug("is monitorable");
}
if(item instanceof ILogAble)
{
log.debug("is logable");
}
}
输出是:
2013-04-22 18:25:00,498 com ... [DEBUG] 是可监控的
2013-04-22 18:25:02,150 com.... [DEBUG] 是可登录的
2013-04-22 18:25:08,322 com.... [DEBUG] 是可监控的
2013-04-22 18:25:08,977 com.... [DEBUG] 是可登录的
这将导致我的程序对每个“xAble”执行双重执行
我希望看到:
2013-04-22 18:25:00,498 com ... [DEBUG] 是可监控的
2013-04-22 18:25:02,150 com.... [DEBUG] 是可登录的
我应该如何重新设计这个(以一种干净的方式)第二个迭代器条件将基于引用类型而不是实例类型。得到这样的东西:
2013-04-22 18:25:00,498 com... [DEBUG] is monitorable
2013-04-22 18:25:02,150 com.... [DEBUG] is logable
- 认为将来我可能会有更多的“能力”
谢谢,雷。