文章出處
文章列表
/// <summary> /// 手機抽象類,即裝飾者模式中的抽象組件類 /// </summary> public abstract class Phone { public abstract void Print(); } /// <summary> /// 蘋果手機,即裝飾著模式中的具體組件類 /// </summary> public class ApplePhone:Phone { /// <summary> /// 重寫基類方法 /// </summary> public override void Print() { Console.WriteLine("開始執行具體的對象——蘋果手機"); } } /// <summary> /// 裝飾抽象類,要讓裝飾完全取代抽象組件,所以必須繼承自Photo /// </summary> public abstract class Decorator:Phone { private Phone phone; public Decorator(Phone p) { this.phone = p; } public override void Print() { if (phone != null) { phone.Print(); } } } /// <summary> /// 貼膜,即具體裝飾者 /// </summary> public class Sticker : Decorator { public Sticker(Phone p) : base(p) { } public override void Print() { base.Print(); // 添加新的行為 AddSticker(); } /// <summary> /// 新的行為方法 /// </summary> public void AddSticker() { Console.WriteLine("現在蘋果手機有貼膜了"); } } /// <summary> /// 手機掛件 /// </summary> public class Accessories : Decorator { public Accessories(Phone p) : base(p) { } public override void Print() { base.Print(); // 添加新的行為 AddAccessories(); } /// <summary> /// 新的行為方法 /// </summary> public void AddAccessories() { Console.WriteLine("現在蘋果手機有漂亮的掛件了"); } }
class Customer { static void Main(string[] args) { // 我買了個蘋果手機 Phone phone = new ApplePhone(); // 現在想貼膜了 Decorator applePhoneWithSticker = new Sticker(phone); // 擴展貼膜行為 applePhoneWithSticker.Print(); Console.WriteLine("----------------------\n"); // 現在我想有掛件了 Decorator applePhoneWithAccessories = new Accessories(phone); // 擴展手機掛件行為 applePhoneWithAccessories.Print(); Console.WriteLine("----------------------\n"); // 現在我同時有貼膜和手機掛件了 Sticker sticker = new Sticker(phone); Accessories applePhoneWithAccessoriesAndSticker = new Accessories(sticker); applePhoneWithAccessoriesAndSticker.Print(); Console.ReadLine(); }
文章列表
全站熱搜
留言列表