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...");
            }
        }
    }
  • 相关阅读:
    Android学习笔记(四十):Preference的使用
    我的Android笔记(十一)——使用Preference保存设置
    Vim简明教程【CoolShell】
    普通人的编辑利器——Vim
    终端shell显示当前git分支_修订版
    代码规范须知_V1.0_20140703
    Android 4.4源码编译过程
    一个帖子学会Android开发四大组件
    什么是软件质量?
    软件配置管理的作用?软件配置包括什么?
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993371.html
Copyright © 2011-2022 走看看