2
假設我設計了一個表示UI控件上的夾點以調整其大小的組件。對象子類化方法
現在顯然各握不行爲方面完全一樣,例如左上角抓地力會顯示一個西北東南鼠標光標並拖動它會改變控件的大小而頂部中間手柄需要顯示南北鼠標光標並拖動它只會讓你改變高度。
在執行方面有兩種基本方法: -
(1)這就需要你在信息傳遞爲你設計什麼基普的抓地力,然後有內一個巨大的switch語句構造以限定把手的實際行爲像這樣: -
- initWithGripType(int)gripType
{
switch(gripType {
case TOP_MIDDLE_GRIP:
cursorType = northSouthCursor;
draggedMovement = upDown;
break;
case TOP_LEFT_GRIP:
cursorType = northWestSouthEastCursor;
draggedMovement = upDownLeftRight;
break;
...
...
...
}
}
(2)具有抓握基類定義的公共屬性。例如,無論它是哪種抓地力,繪製手柄都是一樣的。然後再轉類各把持類型鏈接纔可這樣: -
@interface Grip : NSObject {
NSCursor _cursorType;
int _draggedMovement;
}
// force init to be unavilable for base class
- (id)init __attribute__((unavailable("Instantiate subclass instead.")));
- (void)drawGrip;
@end;
@interface GripTopLeft : Grip {
}
- (id)init;
@end;
@interface GripBottomLeft : Grip {
}
- (id)init;
@end;
...
...
...
方法有兩個有我沒有維護任何switch語句,並可以隨意添加新的握類型的優勢,不足之處是,如果我有很多抓握類型,每個都是一個單獨的源文件和頭文件。
有沒有第三種方法?