Изменение связанных свойств от посетителя

Операторы выбора могут почти всегда заменяться полиморфизмом.

public class NormalCustomer extends Customer {
    public boolean isInvestible() {
        return getSavingsAccount().getBalance() > 1e6;
    }
}

public class PreferredCustomer extends Customer {
    public boolean isInvestible() {
        return isCeo();
    }
}

Этот подход упростит клиентский код. Клиентский код не должен знать детали того, как "investibility" вычисляется, и он больше не должен повреждаться Закон Demeter путем рытья в состояние Клиентского объекта.

5
задан ravenspoint 25 October 2012 в 17:53
поделиться

2 ответа

Ваше решение верное.

Чтобы отделить тип графика от посетителя, вы можете передать конструктору посетителя только карту интересных свойств и получить доступ к его элементам, используя boost :: get (property, u) = s3d :: cV :: leaf; . Таким образом, вы можете передать посетителю любое свойство вершины, совместимое с типом (посетитель будет более общим и не будет иметь смысла называть изменения в типе графа).

Тип для карты свойств будет именем типа шаблона для класса посетителя и будет выглядеть примерно так:

typedef property_map<graph_t, s3d_cv3_leaf_t your_vertex_info::*>::type your_property_map;

См. здесь для полной диссертации о связанных свойствах.

HTH

4
ответ дан 15 December 2019 в 01:06
поделиться

Я только изучаю этот материал, но я Считаю правильным, что вы должны хранить ссылку на график в посетителе. Я' m не уверен, что это по этой причине, но это может быть потому, что они не хотели предоставлять две версии всех функций / требовали, чтобы производные предоставляли две версии каждой функции. Особенно, когда доступен обходной путь через график.

Даже если это покажется странным, я думаю, что передача ссылки на график может быть «правильным путем».

0
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: