zoukankan      html  css  js  c++  java
  • 大话设计-装饰模式

    装饰模式的核心:被装饰对象(最原始),装饰对象(带有装饰功能的被装饰对象)。

    假设有一个被装饰对象叫“ConcreteComponent ”,两个装饰对象叫“ConcreteDecoratorA”、“ConcreteDecoratorB”。装饰是锦上添花的事情,ConcreteComponent 被装饰之前已经最好了最基本的工作,ConcreteDecoratorAConcreteDecoratorB只是在这个基本工作里额外加了些工作

    装饰是无序的,可以ConcreteDecoratorA先装饰ConcreteComponent,然后ConcreteDecoratorB装饰ConcreteDecoratorA。也可以ConcreteDecoratorB先装饰ConcreteComponent,然后ConcreteDecoratorA装饰ConcreteDecoratorB

    被装饰对象和装饰类是否需要抽象跟这里的装饰模式无关。

    using System;
    
    namespace ConsoleApp4
    {
        class Program
        {
            public static void Main(string[] args)
            {
                ConcreteComponent concreteComponent = new ConcreteComponent();
                ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA();
                ConcreteDecoratorB concreteDecoratorB = new ConcreteDecoratorB();
    
                concreteDecoratorA.SetComponent(concreteComponent);
                concreteDecoratorB.SetComponent(concreteDecoratorA);
                concreteDecoratorB.Operation();
            }
        }
        
        abstract class Component
        {
            public abstract void Operation();
        }
    
        class ConcreteComponent:Component
        {
            public override void Operation()
            {
                Console.WriteLine("具体对象的操作");
            }
        }
    
         abstract class Decorator : Component
        {
            protected Component component;
            public void SetComponent(Component component)
            {
                this.component = component;
            }
            public override void Operation()
            {
                if (component != null)
                {
                    component.Operation();
                }
            }
        }
    
         class ConcreteDecoratorA : Decorator
        {
            private string addState;
            public override void Operation()
            {
                base.Operation();
                addState = "A addState";
                Console.WriteLine("A类装饰");
            }
        }
    
        class ConcreteDecoratorB : Decorator
        {
            private string addState;
            public override void Operation()
            {
                base.Operation();
                addState = "B addState";
                Console.WriteLine("B类装饰");
            }
        }
    }
    View Code
    using System;
    
    namespace ConsoleApp4
    {
        class Program
        {
            public static void Main(string[] args)
            {            
                Person person = new Person("白石");
                TShirts shirts = new TShirts();
                Overalls overalls = new Overalls();
    
                shirts.Decorate(person);
                overalls.Decorate(shirts);
            }
        }
        
       class Person
        {
            public Person()
            {
    
            }
            private string name;
            public Person (string name)
            {
                this.name = name;
            }
            public virtual void Show()
            {
                // 什么装饰都没有的基本展示。
                Console.WriteLine($"{name} 一个人的基本show");
            }
        }
    
        abstract class Finery : Person
        {
            protected Person component;
            public void Decorate(Person person)
            {
                this.component = person;
            }
            public override void Show()
            {
                if (component != null)
                {
                    component.Show();
                }
            }
        }
    
        class TShirts : Finery
        {
            public override void Show()
            {
                base.Show();
                Console.WriteLine("穿T恤");
            }
        }
    
        class Overalls : Finery
        {
            public override void Show()
            {
                base.Show();
                Console.WriteLine("工装裤");
            }
        }
    }
  • 相关阅读:
    Kibana查询说明
    windows下安装python 且 安装pip
    pycharm编辑器,各种设置及配置修改
    用python输出未来时间,递增
    window 下python2.7与python3.5两版本共存设置
    python 运算符
    python 运算及注释
    js 实现动态的图片时钟
    js table的笔记,实现添加 td,实现搜索功能
    js实现图片无缝连接
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/decorator.html
Copyright © 2011-2022 走看看