說明:
定義一個操作中的算法的骨架,而將步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義算法的某些特定步驟。
1.定義抽象類,定義抽象類中的抽象行爲
virtual 表示父類定義某種方法,且實現方法的基本形態。
1.子類可以override覆寫virtual方法,則調用父類子類對象都將實現子類override方法。
2.子類也可以new覆寫virtual方法,則調用父類對象和子類對象分別實現不同對象方法。
public abstract calss 抽象類{
public abstract void 吃飯();
public abstract void 睡覺();
public virtual void 哄寶寶(){Console.WriteLine("大家一起鬨寶寶");};
public virtual void 個人娛樂(){Console.WriteLine("看電視");};
public void 日常四部曲 ()
{
吃飯();
睡覺();
Console.WriteLine("打豆豆了!");
哄寶寶();
}
}
2.定義子類,實現抽象行爲
public class 子類小明 :抽象類
{
public override void 吃飯();{Console.WriteLine("吃鮑魚");}
public override void 睡覺();{Console.WriteLine("睡小紅");}
public new void 個人娛樂();{Console.WriteLine("去找小花約炮");}
}
public class 子類小紅 :抽象類
{
public override void 吃飯();{Console.WriteLine("吃龍蝦");}
public override void 睡覺();{Console.WriteLine("睡小明");}
public override void 哄寶寶();{Console.WriteLine("其實寶寶是隔壁老王的!");}
}
3.客戶端調用
抽象類 = new 子類小明();
小明.日常四部曲();
抽象類 = new 子類小紅();
小紅.日常四部曲();
Console.WriteLine("老婆查房模式,小明在幹嘛?");
抽象類 = new 子類小明();
小明.個人娛樂();//看電視
Console.WriteLine("私人祕密模式,小明在幹嘛?");
子類小明 = new 子類小明();
小明.個人娛樂();//去找小花約炮