2014-09-19 6 views
0

C#에서 상속 개념의 실제 사용에 대한 연구를하면서 흥미로운 코드 패턴을 발견했습니다. 제네릭이 아닌 인터페이스 I은 제네릭 형식 I<T>을 여러 번 상속 받았으며 각각 다른 형식 인수가 있습니다. II<T>에서 상속되는 유일한 이유는 오버로드를 선언하기위한 목적이므로 I<T>은 상속 관계를 제외하고 코드의 아무 곳에서나 참조되지 않습니다. 설명하기 : 실제로이 디자인 패턴의 이름을

interface Combined : Operations<Int32>, Operations<Int64>, Operations<double> {} 

interface Operations<T> { 
    T Add(T left, T right); 
    T Multiply(T left, T right); 
} 

IOperations 인터페이스는 다양한 XML 문서 30 방법이있다, 그래서이 선언 그렇게 여러 번 반복하고 싶지에 논리적 인 것 같다. 나는 '과부하 반복 디자인'과 '메소드 선언 재사용 설계 패턴'등을 찾아 봤지만 유용한 정보는 찾을 수 없었다.

아마도이 패턴은 C++와 같은 다중 상속을 지원하는 언어에서 더욱 심오하게 사용됩니다. 여기서는 작업의 구현도 제공 될 수 있습니다.

tl; dr : 위의 코드 예에서 디자인 패턴의 이름을 지정할 수 있습니까?

답변

0

이름이 없다고 생각합니다. 고전적인 패턴 세트는 매개 변수 다형성 (템플릿/제네릭)을 지원하지 않는 구 Java 및 사전 표준화 C++의 코드를 기반으로하므로 실제로 필요하지 않은 패턴이 실제로 나타나지 않습니다. GoF에 관한 한, 그것은 세 가지 인터페이스에서 상속받은 것입니다.

패턴으로보기에는 너무 추악합니다. 왜 그 세 가지 유형 만? Int16 또는 Uint32를 사용하지 않는 이유는 무엇입니까? 메소드가 아닌 인터페이스가 일반적인 이유는 무엇입니까?

+0

질문에 대한 답변 : 예는 단지 예일 뿐이며 더 많은 데이터 유형을 추가하거나 제거 할 수 있습니다. 인터페이스는'IOperations '에서 연산을 지원하는 고정 된 수의 타입이 있고'IOperations '는 절대로 참조되지 않고'Combined' 만 사용되기 때문에 메소드 대신 generic입니다. 이것이 완료된 유일한 이유는 메소드 선언과 XML 문서를 반복하는 것입니다. ('Combined'를 구현 한 클래스는 모든 메소드를 별도로 구현합니다.) – Bas

0

한 가지 제안 - 다른 종류의 인수를

아닌 일반 interfaceI 내가 여러 번 제네릭 형식에서 상속, 각각의 부분에 Adapter pattern 수 있습니다. 내가 상속 유일한 이유는 선언 과부하

내가 너무 클래스와 함께 사용하기위한 목적이다. 클래스의 인터페이스를 다른 인터페이스로 변환하는 것이 도움이됩니다. 어댑터는 호환되지 않는 인터페이스로 인해 클래스가 함께 작동하도록합니다.

솔직히 말해서 어떤 개념이 비 제네시스 인터페이스 I에 구현되어 있는지 모르겠지만 객체를 저장하기위한 일반적인 방법을 호출 할 때 가끔 이 다르게입니다.

+0

어댑터 패턴처럼 보입니다. – Coldstar