zoukankan      html  css  js  c++  java
  • 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...");
            }
        }
    }
  • 相关阅读:
    洛谷 P2920 [USACO08NOV]时间管理Time Management
    湖南测试 1
    洛谷 P1824 进击的奶牛
    4、map 和 tuple
    -_-#【Better JS Code】插入迭代值
    -_-#【JS】defer / async
    -_-#【JS】HTML5 API
    【jQuery】jQuery API 过 一 遍
    ♫【函数】函数声明 / 函数表达式
    -_-#【Mac】命令
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993371.html
Copyright © 2011-2022 走看看