Law of Demeter
(LOD) обескураживает длинную цепочку вызовов. Он говорит, чтобы вызывать методы только для объектов, непосредственно составленных внутри класса, или объектов, созданных внутри метода, объектов, переданных в качестве параметров в методах. Если B b;
является полем в классе A
и B
, то поле имеет вид C
, (C c;
), а затем внутри A.java
. Неправильная практика: b.c.performOperation();
.Как адаптировать шаблон помощи в реализации Закона Деметры
В соответствии с моим пониманием мы должны иметь небольшие методы в каждом классе, выполняющие операции над полем, которое у них внутри, а внешний мир извлекает поля и вызывает методы. Также я понимаю, что для достижения этой цели мы можем использовать Visitor pattern
. Но тогда я прочитал «Адаптер» - это также один из способов реализовать это, чего я не мог понять.
адаптер просто имеет объект класса Adaptee
в нем, и реализует interface
другой системы (как Adaptee
и interface
, находясь в-совместимых друг с другом,). Он использует делегирование для вызова метода на Adaptee
. Здесь LOD
не является швом, чтобы быть нарушенным, но я не могу понять, не будем ли мы использовать шаблон адаптера тогда, как нарушается закон?
Ссылка я взял из от сайта: http://c2.com/cgi/wiki/LawOfDemeter?LawOfDemeter
ObjectQueries? и AdapterPattern - это два способа реализовать закон LawEfDemeter . - DaveOrme
Развернуть по тому, что вы написали: Шаблон адаптера был слабо интерпретирован. * Методы Wrapper * - это решение для кода, который не поддерживает LoD. Адаптеры объектов могут быть * замечены * как обертки, потому что они конвертируют один общедоступный метод в некоторые другие серии инкапсулированных методов. Фасад может делать то же самое, что и просто делегирование (или косвенность). Однако, если вы рассматриваете [полиморфные вызовы] GoF Adapter [часть из его сути] (http://stackoverflow.com/a/13323703/1168342), то Object Adapter не является решением для кода, который не уважать LoD. – Fuhrmanator