2014-11-30 4 views
0

아주 상속 된 구조를 가진 라이브러리를 사용하고 있습니다. (예 : UITableViewController, UIView, UITableViewCell 등 몇 가지 클래스로 구성되어 있습니다. 일부 클래스는 맞춤 개체를 만드는 데 사용됩니다.iOS 라이브러리에 자신의 기능 추가하기

몇 가지 기능을 추가해야합니다 (정확히 말해 탭 제스처 인식기를 구현하기 위해). 몇 가지 코드를 라이브러리의 일부 클래스에 넣는 것이 쉬운 해결책입니다.
일반적으로 내 코드를 라이브러리 코드에서 분리하십시오.이 클래스를 다시 작성하지 않고 이러한 클래스를 "대체"하거나 확장을 추가 할 수 있습니까?

또는 유일한 아이디어는 쓸모없는 코드와 톤을 생성하는 모든 클래스의 재정의를 작성하는 것입니다.

아니면 단순히 라이브러리에 직접 코드를 추가 하시겠습니까?

추가 :
범주가 올바른 방향 것으로 보인다,하지만 특히, 내가 원하는 걸.

- (void)someMethod { 
doThis; 
} 

내가하고 싶은 클래스를 편집 서브 클래스 //없이

가이 변환 :
내가 Class1에 있습니다

- (void)someMethod { 
doThis; 
andThisToo; 
}  

카테고리 A와 다른 방법을 추가 여기에 내가 정확히 원하는 무엇 클래스, 이미 기존의 메서드에 몇 가지 기능을 추가해야합니다.

+1

클래스 카테고리가 작동 할 수 있습니다. – CrimsonChris

+0

@CrimsonChris, 고마워요! 좋고 우아한 해결책, 이것은 나가 요구하고 있던 무슨이다! –

+0

해당 도서관의 저자를 추락시키는 것이 좋습니다. –

답변

2

데코레이터 패턴을 사용해야합니다.

데코레이터 패턴을 연장하거나 장식 클래스의 객체에 그들을 배치함으로써 런타임시 개체의 기능을 변경하는 데 사용된다. 이렇게하면 에 상속을 사용하는 대신 유연한 방법으로 동작을 수정할 수 있습니다. 당신이주는 예는 꽤 스케치이기 때문에

, 나는 당신이 여기 준 것에 대해 생각 코드 예제를 제공하지만, 위키 백과 (http://en.wikipedia.org/wiki/Decorator_pattern)

편집

을 체크 아웃 할 수 없습니다 데코레이터의 예가 될 수 있습니다 :

@interface Decorator 
@property (strong, nonatomic) id decoratedObject; 
- (void)someMethod; 
@end 

@implementation Decorator 
- (void)someMethod { 
    [self.decoratedObject doThis]; 
    [self andDoThisToo]; 
} 

@end 
+0

좋은 점은 이미 논의했지만 이미 기존 방법에 몇 가지 기능을 추가해야합니다. 이 링크에 따르면 : http://www.raywenderlich.com/46988/ios-design-patterns, Categories 또는 Delegates를 사용할 수 있습니다. 이 두 가지 모두 나를 만족시키지 않아 결국 라이브러리의 코드를 변경하게됩니다. 편집에 관한 –

+0

: 내 특별한 경우에는 "내"클래스에서 멀리 떨어져 있고 라이브러리의 계층 구조에 깊이 배치되어있는 객체에서 메소드를 수정해야합니다. 그래서이 접근법을 사용하면 라이브러리의 다른 클래스를 변경 (또는 카테고리를 작성해야합니다.)하지 않아도됩니다. –

+0

데코레이터가 데코 레이팅 된 객체와 동일한 인터페이스를 충족하는 한 라이브러리의 객체가 얼마나 멀리 떨어져 있는지 또는 객체가 깊숙한 곳인지는 중요하지 않습니다. 그리고 Decorator는 변경되지 않은 모든 호출을 데코 레이팅 된 객체로 전달하여 해당 인터페이스를 충족시킬 수 있습니다. 당연히 당신은 당신이 장식하고 싶은 목표에 도착할 수 있어야합니다, 그러나 당신이 그것을 할조차 수없는 경우에, 아마 어쩌면 당신은 당신의 디자인을 재고해야한다. 즉, 아이디어가 작동하지 않으면 작동하지 않는다고 말했습니다. –

관련 문제