我的代码是否属于任何设计模式?

Lon*_*man 1 java design-patterns

我有这段代码:

private String objectToString(Object obj){
if (obj instanceof String)
    return (String)obj;
if (obj instanceof Struct){
    Map<String,?> map = ((Struct)obj).getMembers();
     return map.toString();
 }
Class c = obj.getClass();
if (c.isArray())
{
    //obj. iterate elements and return values;
    return obj.toString();//to redi this

}
//this is for any other datatypes
else
    return obj.toString();
Run Code Online (Sandbox Code Playgroud)

}

有人可以建议,如果这属于来自GOF.Code的任何设计模式是直截了当的,只是为了澄清它查看传递的参数,并取决于以人类可读形式返回字符串的类型.

Lor*_*ias 6

您的代码是反模式的明显示例.最干净的方法是简单地覆盖您想要自定义文本表示的每个对象的toString()方法.例如,每次调用System.out.println(someObject)时 - 它会调用此特定对象的toString().

这里有一个文章,解释如何/为什么它是覆盖一个好主意.想一想 - 为什么你必须集中关于不同对象的文本表示的逻辑,这些对象可能没有任何共同点?这就是为什么toString()是Java的Object对象的一部分的确切原因,并且因为java中的每个类都隐式地从Object继承,所以覆盖toString()方法是完全合理的.

覆盖toString()方法还可以访问对象的内部状态,如果您想要进行正确的文本表示,这可能是必需的,这对于您提议的实现是不容易完成的(虽然它当然可以公开)只是为了文本表示,这样做是没有意义的.