我有一種情況,我有2 Activity
個對象(比如空的和計劃的活動,不受我控制)共享一些行爲,例如預訂活動的人員,活動發生的房間,活動類型,主題等正確使用實現而不是抽象或更改實現?
我創建了有一個超類ActivityWrapper
實現一些常見的兩種孩子的方法和對孩子的包裝一些抽象的方法/屬性作出相應的反應兩個包裝器對象(EmptyWrapper
和ScheduledWrapper
)。他們在行爲上非常相似,但有一個至關重要的區別,你只能安排活動,如果它是空的插槽!該結構是這樣的(非常簡單的代碼):
public class EmptyWrapper : AppWrapper
{
EmptySlot _emptySlot;
public EmptySlotWrapper(EmptySlot emptySlot) : base()
{
this._emptySlot = emptySlot;
}
public override string Id
{
get { return _emptySlot.AgendaId; }
}
public override string Room;
{
get{ return _emptySlot.Room;}
}
public override string Person
{
get{ return _emptySlot.Person;}
}
public override string AppType;
{
get{ return "Empty";}
}
public override bool IsAppSlot()
{
return false;
}
public override bool IsEmptySlot()
{
return true;
}
public override bool CanPerformOperations()
{
return true;
}
public void ReserveApp(ObjWithActivityInfo actObj)
{
(...)
}
}
的ActivityWrapper
相似,但纏的對象是不同的,在布爾變量爲IsAppSlot
返回true,false爲IsEmptySlot
和虛假的CanPerformOperations
並沒有ReserveApp()
方法。
其次是基類:
public abstract class AppWrapper
{
public abstract string Collaborator { get; }
public abstract string Room { get; }
public abstract string AppType { get;}
public AppWrapper()
{ }
public abstract bool IsAppSlot();
public abstract bool IsEmptySlot();
public abstract bool CanPerformOperations();
public virtual string GetTextToShow()
{
return Person + " - " + Room;
}
(...)
}
在我的代碼,我想引用僅ActivityWrapper
,因爲對於一般的操作(顯示信息和外觀)我不需要的實現。當我需要爲空插槽預訂活動時,問題會增加。在這一點上,在我的代碼中,我將AppointmentWrapper
轉換爲EmptyWrapper
,併爲該活動預留了插槽(它仍然是一個EmptySlot
,但它保留給選定的活動),否則,如果演員陣容不對,我什麼都不做因爲它不是正確的Activity
類型。
這是正確的,還是應該在兩個包裝中實施ReserveActivity()
方法,並讓ActivityWrapper
什麼都不做?
或者我應該以另一種方式做到這一點?也許會改變類的結構?
對不起,長文字。
哪裏是'AppointmentWrapper'? – 2010-11-01 13:04:44
對不起:感謝錯誤提示。 – Jay 2010-11-01 14:44:01