Objective-C는 추상 클래스를 지원하지 않지만 그럼에도 OO 언어 (http://en.wikipedia.org/wiki/Objective-C)라는 것을 알고 있습니다. 그래서 저는 하나를 제외하고는 같은 메소드를 가진 여러 객체를 가지고 있습니다. DRY 원칙을 따르고 여러 클래스에서 동일한 코드를 반복하지 않아도됩니다. 가장 좋은 방법은 무엇입니까?객관적인 C에서 "템플릿 메서드 패턴"구현
0
A
답변
1
그래서 하나의 메소드를 제외하고는 여러 객체가 있으므로 DRY 원칙을 따르고 한 곳에서 동일한 코드를 반복하지 않으려합니다.
나는 ""을 제외하고 같은 방법으로 여러 개의 숫자가 있다고 가정합니다.
그것은 당신이 모든 것에 대해 얼마나 공식적으로하고 싶은가에 달려 있습니다. 모든 메소드는 모두 기본 클래스로 시작합니다. 나는 그걸 @interface A : NSObject
라고 부를 것이다. A
의
하위 클래스는 A
@interface A1 : A
@interface A2 : A
에서 독특한 방법을 필요로 하위 클래스는 내가 호출 상속 B
@interface B : A
런타임에 클래스 A의 개체가이 고유 한 메서드를 수행 할 수 있는지 테스트 할 수 있습니다.
A *a = ...
if ([a respondsToSelector:@selector(uniqueMethod)])
[(id)a uniqueMethod];
이 매우 비공식적 인 방법이며 다른 클래스가 고유의 방법을 구현하기 시작하면 향후 유지 보수 문제가 발생할 수 있습니다.
다른 옵션은 클래스 멤버십을 확인하는 것입니다.
A *a = ...
if ([a isKindOfClass:[B class]])
[(B *)a uniqueMethod];
이것은 여전히 비공식적이지만 향후 변경 사항을보다 잘 보호합니다. A
의 다른 인스턴스는 나중에 고유 한 메서드를 사용해야 할 수도 있지만 이후 B
의 하위 클래스로 리팩토링해야하므로 향후 유연성이 제한됩니다.
공식적인 방법은 프로토콜입니다. A
및 B
에 대한 프로토콜을 작성하여 AP
및 BP
이라고합니다. 그러면 A
및 B
의 인터페이스가 변경됩니다. @interface A : NSObject <AP>
@interface B : A <BP>
- 이제 시험 적합성에 대한 문제가된다.
A *a = ... if ([a conformsToProtocol:@protocol(BP)]) [(id<BP>)a uniqueMethod];
이 보호하고 유연성을 허용하지만, 미래의 변화가 필요할 때 유지하기 위해 더 많은 작업이다.
희망이 있습니다.
관련 문제
- 1. 객관적인 C에서 메서드 오버로드
- 2. 객관적인 C에서 다른 viewcontroller에서 메서드 호출하기
- 3. 객관적인 C에서 C++ 템플릿 클래스를 사용하는 방법
- 4. 객관적인 c에서 일치하는 접두사
- 5. 객관적인 c에서 swift로 전환
- 6. 객관적인 C에서 POST 사용
- 7. 객관적인 C에서 [release] 사용
- 8. 객관적인 C에서 비교 - ARC
- 9. 객관적인 C에서 숯불 * 배열
- 10. 객관적인 C에서 __OBJC__
- 11. 객관적인 c에서 js를 실행하려면
- 12. 객관적인 C에서 unhexlify
- 13. 객관적인 C에서 UIImageView의 배열
- 14. 객관적인 C에서 RTSP 스트리밍
- 15. 객관적인 C에서 **의 구문
- 16. 객관적인 C에서 다차원 배열
- 17. 객관적인 - C에서 상수 클래스
- 18. 객관적인 c에서 javascript로 변수를 반환합니다.
- 19. 객관적인 C에서 NSNotification을 사용하는 방법
- 20. 객관적인 C에서 MDIForms 만드는 방법?
- 21. 객관적인 C에서 임시 대리인 인스턴스
- 22. 객관적인 C에서 자바에 Sqlite 쿼리
- 23. 객관적인 C에서 빙 이미지 검색
- 24. 객관적인 C에서 중첩 참조 사용
- 25. 객관적인 C에서 문자열 형식 비교
- 26. 객관적인 C에서 문자열을 함께 연결
- 27. 객관적인 - C에서 포인터 값을 전달
- 28. 객관적인 C에서 NSMakeRange를 어떻게 사용합니까?
- 29. 객관적인 C에서 CheckSum을 계산하는 방법
- 30. 객관적인 c에서 정규 표현식 검색
일반적인 수퍼 클래스가 올바른 해결책으로 보입니다. –
.... ** 추상 수퍼 클래스 **로도 알려져 있습니다. 그러한 패턴의 가장 널리 사용되는 예 중 하나 인 클래스 클러스터를 참조하십시오. – bbum
감사합니다. 내가 듣기를 기대했던 것입니다. – pvllnspk