Оба оборачивают объект за одним и тем же интерфейсом, но намерение различается: работа декоратора заключается в добавлении поведения и предназначена для произвольного укладки клиентом, который знает, что он декорирует. Задача прокси — контролировать доступ и должна быть прозрачной — клиент обычно не знает, что он разговаривает с прокси, а не с реальным объектом.
Пример
@WebMvcTest(OrderController.class)classOrderControllerTest {
@Autowired MockMvc mockMvc;
@MockBean OrderService orderService; // real service NOT loaded - only the web layer is@Testvoidreturns404WhenOrderMissing()throws Exception {
given(orderService.findById(1L)).willThrow(newOrderNotFoundException(1L));
mockMvc.perform(get("/api/orders/1"))
.andExpect(status().isNotFound())
.andExpect(jsonPath("$.code").value("ORDER_NOT_FOUND"));
}
}
Итог
Оба оборачивают объект за одним и тем же интерфейсом, но намерение различается: работа декоратора заключается в добавлении поведения и предназначена для произвольного укладки клиентом, который знает, что он декорирует.
В чем разница между Proxy и Decorator, если на диаграмме классов он… · Sobeso