Decorator装饰器模式属于结构型设计模式,动态地给一个对象增加一些额外的职责,扩展功能提供了一种灵活的子类替代方法。
Design Pattern:Decorator 🔗
基本介绍 🔗
构成 🔗
- Component:抽象组件类,为可以动态添加职责的对象定义接口。
- Concrete Component:具体组件类,动态添加职责的实际对象。
- Decorator:装饰类,持有组件(Component)对象的实例,并实现一个与抽象组件接口一致的接口。
- Concrete Decorator:具体装饰类,负责给组件对象添加上附加的职责。
优点 🔗
- 在不更改原始代码的情况下向现有对象添加新功能。
- 无需使用继承即可创建复杂的设计。
- 支持开闭原则。
缺点 🔗
- 当实现接口很大时使用装饰器模式会很复杂。
- 增加的复杂性使调试更加困难。
实例 🔗
C#中装饰器模式的实例,华为手机有很多型号,然后屏幕有刘海屏和曲面屏等等,我们以组装手机时获取屏幕的样式为例。
/// <summary>
/// 手机屏幕
/// </summary>
public abstract class Screen
{
/// <summary>
/// 屏幕样式
/// </summary>
public abstract void Style();
}
public class LiuHaiScreen : Screen
{
public override void Style()
{
Console.WriteLine("刘海屏屏幕");
}
}
public class QuMianScreen : Screen
{
public override void Style()
{
Console.WriteLine("曲面屏屏幕");
}
}
/// <summary>
/// 手机
/// </summary>
public abstract class Phone : Screen
{
protected Screen _screen;
public Phone(Screen screen)
{
_screen = screen;
}
public override void Style()
{
}
}
/// <summary>
/// 华为P系列手机
/// </summary>
public sealed class HuaWeiPXPhone : Phone
{
public HuaWeiPXPhone(Screen screen) : base(screen)
{
}
public override void Style()
{
base.Style();
}
}
实际运行:
Screen liuhai = new LiuHaiScreen();
Screen qumian = new QuMianScreen();
Phone pxPhone = new HuaWeiPXPhone(liuhai);
Phone mxPhone = new HuaWeiMXPhone(qumian);
结论 🔗
搬砖愉快!