日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

大話設計-裝飾模式

 怡紅公子0526 2021-07-22

裝飾模式的核心:被裝飾對象(最原始),裝飾對象(帶有裝飾功能的被裝飾對象)。

假設有一個被裝飾對象叫“ConcreteComponent ”,兩個裝飾對象叫“ConcreteDecoratorA”、“ConcreteDecoratorB”。裝飾是錦上添花的事情,ConcreteComponent 被裝飾之前已經(jīng)最好了最基本的工作,ConcreteDecoratorAConcreteDecoratorB只是在這個基本工作里額外加了些工作。

裝飾是無序的,可以ConcreteDecoratorA先裝飾ConcreteComponent,然后ConcreteDecoratorB裝飾ConcreteDecoratorA。也可以ConcreteDecoratorB先裝飾ConcreteComponent,然后ConcreteDecoratorA裝飾ConcreteDecoratorB。

被裝飾對象和裝飾類是否需要抽象跟這里的裝飾模式無關(guān)。

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("工裝褲");
        }
    }
}

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多