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...");
            }
        }
    }
  • 相关阅读:
    编译器与解释器的区别
    django中两张表之间有多个ForeignKey的问题
    23python装饰器的使用
    24.python传递可变长的非关键参数和关键参数
    如何让django的admin组件显示为中文
    22迭代器和iter()函数
    如何让django中的admin组件的表的字段显示为中文
    django模板中关于过滤器的使用
    django的认证支持模块
    python如何实现——日期加上天数的处理方法
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993371.html
Copyright © 2011-2022 走看看