- 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. 谢谢!