装饰者模式
模式 装饰
2023-09-11 14:20:28 时间
/// <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(); }
相关文章
- Nginx+keepalived双机热备(主从模式)
- Future Promise 模式(netty源码9)
- 设计模式复习-装饰模式
- C++设计模式 ==> 装饰(者)模式
- 设计模式(三):观察者模式与发布/订阅模式区别
- C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别
- 进入CentOS字符界面及窗口模式的方法
- 设计模式--结构性模式--装饰器模式(装饰设计模式)
- 设计模式:装饰者模式
- 关于装饰模式和动态代理模式
- 从ES6重新认识JavaScript设计模式: 装饰器模式
- 【设计模式sgg】设计模式----—9装饰者模式
- 《JavaScript设计模式》——9.12 Decorator(装饰者)模式
- C++装饰者模式
- Java设计模式之结构型:装饰器模式
- 设计模式初探-桥接(Bridge)模式
- 行为型模式之命令模式
- 模板方法模式
- Java与模式:装饰(Decorator)模式
- 从王者荣耀看设计模式(七.装饰者模式)
- Decorator装饰者模式(结构型模式)
- 代理模式和装饰者模式的区别
- 虚拟机中的centos在nat模式下连不上外网
- 23种设计模式之装饰模式(Decorator)