2009-11-14 6 views
4

예를 들어 장바구니에 추가 할 수있는 Product 클래스가 있다고 가정합니다. 장바구니에 들어있을 때 다른 항목과 함께 포장하고 15 % 할인을 추가 할 수 있습니다.개체에 대한 장식자를 만드는 것이 적절한 경우와 전략을 적용 할 수 있도록 개체를 다시 쓰는 것이 적절한 경우는 언제입니까?

거래가 허용되는 새로운 하위 클래스로 상품 클래스를 장식해야합니까? 아니면 제품 클래스가 제품에 가격 인하 전략 객체를 첨부하여 가격을 낮추도록 재 설계해야합니까?

이것은 추상적 인 예이므로 어디서나 가져 가십시오.

답변

3

데코레이터는 적용 할 수있는 가장 덜 침해적인 패턴 중 하나입니다. 그렇게하면 원래 클래스가 수정되지 않으므로 열기/닫기 원칙을 따릅니다. 나는 가능할 때마다 Decorator를 사용하는 경향이있다. 원래 클래스가 확장 프로그램과 상호 작용할 필요가없는 경우가 대부분입니다.

전략을 주입하는 것이 전략을 받아들이도록 수정되어야하기 때문에 더 공격적입니다 (분명히 일단이 수정을하면 더 많은 전략을 적용하지 않고도 많은 전략을 적용 할 수 있습니다). 원래 클래스가 전략과 상호 작용해야 할 때 전략을 사용합니다 (예 : 뭔가 물어보십시오).

전략은 종종 장식 할 수 있습니다 ...

+0

당신은 내가 포함 할 거라고 여기 단어를 사용 내 대답은 : "주사". 나는 주사와 전략을 함께 사용하는 경향이 있습니다. Decorating을 기존 기능을 추가하는 것으로 생각하는 경향이 있습니다. 내 'child.SomeMethod()'메서드가 'base.SomeMethod()'를 호출 할 때 별 장식을 사용하는 경향이 있습니다. –

+0

이렇게 인위적인 예제를 사용하면 장바구니에 거래를 "인식"시키거나 "할인 제품"데코레이터 클래스로 장바구니에 제품을 포장하는 것이 더 적절합니까? – Zak

+0

서면으로 그렇습니다. 실제로 제품과 카트에 관해서는, 절약 된 금액을보고 할 수 있도록 할인 된 가격과 원래 가격을 알고 싶을 것입니다.이 경우 예가 떨어져 나갑니다. –

0

도메인을 확인하십시오.

가격 인하가 가능한 제품이라면 (hm ... 나는 그렇게 생각하지 않습니다) 제품에 추가해야합니다. 주문의 경우 (할인을 할 수있는 적절한 장소) 다음에 있어야합니다.

+0

하지만 쇼핑 카트 아이템은 주문하지 않고, 표시/할인 혜택을해야 할 때 적절한 .. – Zak