zoukankan      html  css  js  c++  java
  • 装饰模式

    装饰模式:

    动态的给一个对象添加一些额外的职责,就增加功能呢来说,装饰模式比生成自来更为灵活。

    装饰模式与职责链模式的差别:

    1,装饰模式,增加这些功能会被一一执行。

    2,职责链模式:并不是职责链中所有的职责代码都会执行。

    /// <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("现在苹果手机有漂亮的挂件了");
    }
    }

    地址:http://www.cnblogs.com/zhili/p/DecoratorPattern.html

  • 相关阅读:
    济南空中课堂视频下载辅助脚本
    npm 修改仓库源
    Java后端实现登陆的方式
    java 新词汇
    数据库系统,设计、实现与管理(基础篇)阅读笔记
    java 面试01
    js rem 适配多端
    了解Java
    linux 查看内存使用情况
    linux 日志查看
  • 原文地址:https://www.cnblogs.com/suzixuan/p/6980437.html
Copyright © 2011-2022 走看看