通过仅添加基类的新子类来使用哪种模式来执行新代码?

时间:2018-08-27 22:17:17

标签: c++ design-patterns

我正在尝试找出一种模式,以避免在类似于以下情况的情况下重复代码:

std::list<int> error_list;
void validate()
{
    if( validate_0001() == false )
    { error_list.push_back(1); }

    if( validate_0002() == false )
    { error_list.push_back(2); }

    ...
}

“ validate”方法在负责执行不同动作的类中是公共的,在示例验证中,每个动作都有唯一的ID。我希望能够通过扩展基类来添加新操作,而无需创建新方法并将其调用及其错误处理添加到validate方法内部。

2 个答案:

答案 0 :(得分:0)

我建议您使用验证修饰符(这是一个Java示例)

    abstract class Validation {
        final List<Integer> list;

        Validation(List<Integer> list) {
            this.list = list;
        }

        public abstract int error();
    }

    class FirstValidation extends Validation {

        public FirstValidation(List<Integer> list) {
            super(list);
        }

        @Override
        public int error() {
            return 0;
        }
    }

答案 1 :(得分:-1)

如果不扩展整个类,就不能真正地从基类扩展单个函数。 您可以做的一件事是将验证方法放在一个单独的类中,并将其扩展到另外两个类中。您可以做的另一件事是将验证作为抽象类进行,并在子类中随意实现它,这种方法的缺点是您必须在每个子类中提供实现。