我有一个接口Schema,另一个名为SchemaParser
SimpleSchemaParser实现SchemaParser,而SimpleSchema实现Schema

SimpleSchemaParser具有方法parseSchema(),该方法返回Schema。这样,SimpleSchemaParser.parseSchema()将返回一个Schema对象。但是我知道SimpleSchemaParser总是会返回SimpleSchema。我应该如何更改设计以使其清晰可见,而不是总是将结果强制转换为SimpleSchema?在这种情况下,我应该选择仿制药吗?

最佳答案

您确实可以使用泛型,但不是必需的:

class SchemaExample
{
    interface Schema
    {
        // methods go here
    }

    interface SchemaParser
    {
        Schema parseSchema();
    }

    class SimpleSchema implements Schema
    {
        // implementation of Schema's methods
    }

    class SimpleSchemaParser implements SchemaParser
    {
        @Override
        public SimpleSchema parseSchema()
        {
            // real business logic here...
            return new SimpleSchema();
        }
    }

    void usage()
    {
        SimpleSchema schema = new SimpleSchemaParser().parseSchema();
    }
}


一个更广泛的问题是:为什么您要关心返回的是哪种模式的实现?是否有仅在SimpleSchema上存在的方法?这些可以上移到Schema界面吗?

09-25 20:23