2009-04-06 5 views
0

일부 속성과 채널을 확장하는 ChannelProxy가있는 채널이 있습니다. 이 ChannelProxy는 낙관적 동시성을 적용 할 수 있도록 원래 값을 유지합니다. 동시성 검사와 낙관적 동시성 검사 사이를 전환 할 수 있습니다.디자인 호

이제 Channel이나 ChannelProxy가 될 수있는 LazyLoadedChannel을 구현하고 싶습니다. 둘 모두를 확장하는 것은 불가능합니다. 이런 종류의 문제에 대한 좋은 해결책은 무엇입니까?

LazyLoadedChannel (확장 채널)과 LazyLoadedChannelProxy (확장 ChannelProxy)를 만들 수 있지만 코드가 두 클래스 모두에서 복제된다는 의미입니다.

답변

2

데코레이터 패턴도 나에게 좋은 선택입니다.

다른 방법으로, 그러나, 당신이 할 수 있습니다 :

  1. 는 확인 당신과 같은 구성 Channel 게으른로드 또는 비 게으른로드. 이를 달성하기 위해 Strategy Pattern을 사용할 수 있습니다.
  2. Channel이 이렇게 구성 가능하면 ChannelProxy은 서브 클래스이므로 자동으로 구성 가능해야합니다. 그래서 더 이상 아무것도 할 필요가 없습니다.
  3. 또는 : '로딩'에 따라 ChannelProxy은 고유 한 LoadingStrategy 클래스를 제공해야 할 수 있습니다.
+0

사실,이 예제는 .NET 프로젝트에서 보았습니다. 나는 그들 모두에게 더 맞는 것을보기 위해 그들 모두를 시도 할 것이다. 고마워. –

0

위와 같이 (Dmitri) 사용자가 채널을 장식하는 장식품처럼 보입니다. 프록시가 필요한 경우에만 (즉 변경 예정) 값에 액세스한다고 가정합니다.

+0

그래서 Decorator에서 채널 (또는 ChannelProx)과 동일한 getter 및 setter가 필요하지만 채널 인스턴스로 전달해야합니까? (당신이 lazyloaded되고 싶은 것들을 제외하고). –

+0

예. 나는 Frederick이 당신에게 필요한 지침을 주었다고 생각한다 .- 나는 프록시가 다소 더 종류의 데코레이터이기 때문에 프록시에서 그렇게하고 있다고 생각했다. – Rashack