陈巧倩

设计模式-装饰器模式

· 155 words · 1 minutes to read
Categories: CSharp
Tags: Design Pattern

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);

结论 🔗

搬砖愉快!