沒有。
您必須經常使用類集羣解決這個問題,持有私有實現或創建對象工廠。那麼你可以最小化跨模塊的依賴關係。
如果您打算使用它(例如創建一個實例),您仍然需要在某個階段鏈接到子庫。
更新 - 展示私有實現
私人實現可以是完全不透明的。如果你揭露他們,這裏是實現私有實現這都是可見的客戶有兩種方式:通過協議
:通過基地
// MONDrawProtocol.h
// zero linkage required
// needs to be visible to adopt
// may be forwarded
@protocol MONDrawProtocol
- (void)drawView:(NSView *)view inRect:(NSRect)rect;
@end
// MONView.h
@protocol MONDrawProtocol;
@interface MONView : NSView
{
NSObject<MONDrawProtocol>* drawer;
}
@end
// MONView.m
#include "MONDrawProtocol.h"
@implementation MONView
- (void)drawRect:(NSRect)rect
{
[self.drawer drawView:self inRect:rect];
}
@end
:
// MONDrawer.h
// base needs to be visible to subclass and types which use MONDrawer
// may be forwarded
@interface MONDrawer : NSObject
- (void)drawView:(NSView *)view inRect:(NSRect)rect;
@end
// MONView.h
@class MONDrawer;
@interface MONView : NSView
{
MONDrawer * drawer;
}
@end
// MONView.m
#include "MONDrawer.h"
@implementation MONView
- (void)drawRect:(NSRect)rect
{
[self.drawer drawView:self inRect:rect];
}
@end
「私有實現」是什麼意思?也許這正是我想要的/在這裏要求的?看到我自己的答案爲我的當前解決方案,它工作得很好。 – Albert
@Albert更新。你的答案使用工廠;工廠經常被使用,當你必須派生。 – justin
這看起來很複雜。畢竟,我仍然想擁有那個'NSView'。爲什麼不使用我在回答中提出的建議?我無法真正看到您的解決方案的優勢。 – Albert