小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

大話設(shè)計(jì)-裝飾模式

 怡紅公子0526 2021-07-22

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

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

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

被裝飾對(duì)象和裝飾類是否需要抽象跟這里的裝飾模式無關(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("具體對(duì)象的操作");
        }
    }

     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} 一個(gè)人的基本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("工裝褲");
        }
    }
}

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多