• CSharp设计模式读书笔记(10):装饰模式(学习难度:★★★☆☆,使用频率:★★★☆☆)


    装饰模式(Decorator Pattern):

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

    模式角色与结构:

    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CSharp.DesignPattern.DecoratorPattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                Component component;
                Component componentDecorator;
    
                component = new Window();
                componentDecorator = new ScrollBarDecorator(component);
    
                componentDecorator.display();
    
                component = new TextBox();
                componentDecorator = new BlackBorderDecorator(component);
    
                componentDecorator.display();
    
                Console.ReadLine();
            }
        }
    
        // 抽象构件
        abstract class Component
        {
            public abstract void display();
        }
    
        // 具体构件
        class Window : Component
        {
            public override void display()
            {
                Console.WriteLine("Window...");
            }
        }
    
        class TextBox : Component
        {
            public override void display()
            {
                Console.WriteLine("TextBox...");
            }
        }
    
        // 抽象装饰类
        class ComponentDecorator : Component
        {
            private Component component; // 维持对抽象构件类型对象的引用
    
            public ComponentDecorator(Component component) // 注入抽象构件类型的对象
            {
                this.component = component;
            }
    
            public override void display()
            {
                component.display();
            }
        }
    
        // 具体装饰类
        class ScrollBarDecorator : ComponentDecorator
        {
            public ScrollBarDecorator(Component component) 
                : base(component)
            {   
            }
    
            public override void display()
            {
                this.SetScrollBar();
                base.display();
            }
    
            public void SetScrollBar()
            {
                Console.WriteLine("Add Scroll Bar...");
            }
        }
    
        class BlackBorderDecorator : ComponentDecorator
        {
            public BlackBorderDecorator(Component component)
                : base(component)
            { }
    
            public override void display()
            {
                this.SetBlackBorder();
                base.display();
            }
    
            public void SetBlackBorder()
            {
                Console.WriteLine("Add Black Border...");
            }
        }
    }
  • 相关阅读:
    Some bugs in CE6
    WINCE知识点滴
    多个设备共享同一个硬件中断
    磁盘分区详解
    开发串口驱动程序
    CE BSP开发入门之重要的配置文件
    boost pcre Greta RE2 正则表达式性能测试
    Python GIL
    Oracle Instant Client 安装
    C++ 与 python 整数除法差异
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993371.html
Copyright © 2020-2023  润新知