• 1. 第十一章 装饰模式
  • 2. 组合模式的原理 组合模式,有什么优缺点? 回顾
  • 3. 结构模式 适配器模式(Adapter) 桥接模式(Bridge) 组合模式(Composite) 装饰模式(Decorator) 外观模式(Facade) 享元模式(Flyweight) 代理模式(Proxy) 本章任务
  • 4. 装饰模式——引子 给相片加上装饰,镶嵌两种不同的相架,来装饰不同的照片。 在程序中,如何实现?
  • 5. 装饰模式——定义定义 动态地给一个对象增加其他职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。
  • 6. 装饰模式——结构图
  • 7. 装饰模式——参与者参与者 部件(Compontent): 定义对象的接口,可以给这些对象动态增加职责(方法)。 具体部件(Concrete Compontent): 定义具体的对象,装饰抽象类可以给它增加额外的职责(方法)。 装饰抽象类(Decorator): 维护一个内有的部件,并且定义一个与部件接口一致的接口。 具体装饰对象(Concrete Decorator): 具体的装饰对象,给内在的具体部件对象增加具体的职责(方法)
  • 8. 装饰模式——应用abstract class Photo { public abstract void Display(); }部件class LifePhoto : Photo { public override void Display() { Console.WriteLine("生活照"); } }具体部件
  • 9. 装饰模式——应用abstract class PhotoFrame : Photo { private Photo _photo; public PhotoFrame(Photo photo) { this._photo = photo; } public override void Display() { _photo.Display(); } }装饰抽象类内有的部件
  • 10. 装饰模式——应用class GlassPhotoFrame : PhotoFrame { public GlassPhotoFrame(Photo photo) : base(photo) { } public override void Display() { Console.Write("加了玻璃相框的"); base.Display(); } }具体装饰对象
  • 11. 装饰模式——应用class Program { static void Main(string[] args) { Photo life = new LifePhoto(); Photo art = new ArtPhoto(); life.Display(); art.Display(); PhotoFrame glass = new GlassPhotoFrame(life); glass.Display(); PhotoFrame ruby = new RubyPhotoFrame(art); ruby.Display(); Console.ReadLine(); } }客户端调用
  • 12. 装饰模式——优缺点优缺点 优点 提供了比静态继承更好的柔韧性,允许开发一系列的功能类来代替增加对象的行为,这既不会污染原来对象的源码,还能使代码更容易编写,使类更具扩展性,因为变化都是由新的装饰类来完成的。 还可以建立连接的装饰对象关系链。 缺点 装饰链不易过长,太长会使系统花费较长时间用于初始化对象,同时信息在链中的传递弛会浪费太多的时间。 如果原来的对象接口发生变化,它所有的装饰类都要修改以匹配它的变化。 派生子类会影响对象的内部,而一个Decorator只会影响对象的外表。
  • 13. 装饰模式——适用性适用性 想透明并且动态地给对象增加新的职责(方法),而又不会影响其他对象。 给对象增加的职责在未来会发生改变。 用子类扩展功能不实际的情况下。
  • 14. 总结简单描述下,什么是装饰模式? 装饰模式,有什么优缺点?
  • 15. 谢谢!