9.装饰者模式(Decorator Pattern)
2015-07-11 16:47
337 查看
using System; namespace ConsoleApplication7 { class Program { 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(); } } /// <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("现在苹果手机有漂亮的挂件了"); } } }
相关文章推荐
- Android主线程、子线程通信(Thread+handler)
- C#中的委托和事件
- 【LeetCode】235. Lowest Common Ancestor of a Binary Search Tree (2 solutions)
- MBProgressHUD 第三方详解学习
- 无法删除AVD
- Java基础-- Java API
- CSAPP LAB---Proxy lab
- UI2_ScrollView&UIPageControl
- VC++ 6.0 C8051F340 USB 通信 CAN 数据解析
- StringBuffer类
- 编程开发中最浪费时间和资源的7个错误
- 10755 - Garbage Heap
- C++设计模式——单例模式
- [转载]深入JVM锁机制-synchronized
- Linux系统中SAR命令说明
- 三阶行列式求法
- pod的安装和使用
- [ Javascript ] 内存泄露以及循环引用解析
- linux 命令之top
- 【Win10 应用开发】集成语音命令