装饰器模式

1.简介

  装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

  我们模拟游戏角色进行装饰器模式的学习

  在这个游戏中,我们新建一个角色,并使用装饰器模式获取各种装备

  先新建一个基础特征类(余下所有类都继承这个类或者继承 继承这个类的类)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern
{
    public abstract class BaseCharacter
    {
        public abstract void Show();
    }
}

  添加一个新建法师角色的功能

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern
{
    public class Mage : BaseCharacter
    {
        public override void Show()
        {
            Console.WriteLine("《《====    新建一个法师角色    ====》》");
        }
    }
}

  添加一个装饰器类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    public class BaseDecorator : BaseCharacter
    {
        BaseCharacter _baseCharacter = null;
        public BaseDecorator(BaseCharacter baseCharacter)
        {
            _baseCharacter = baseCharacter;
        }
        public override void Show()
        {
            _baseCharacter.Show();
        }
    }
}

  添加装备类1-4

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    public class DecoratorEquip1 : BaseCharacter
    {
        BaseCharacter _baseCharacter = null;
        public DecoratorEquip1(BaseCharacter baseCharacter)
        {
            _baseCharacter = baseCharacter;
        }
        public override void Show()
        {
            _baseCharacter.Show();
            Console.WriteLine("获得装备1");
        }
    }
}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    public class DecoratorEquip2 : BaseCharacter
    {
        BaseCharacter _baseCharacter = null;
        public DecoratorEquip2(BaseCharacter baseCharacter)
        {
            _baseCharacter = baseCharacter;
        }
        public override void Show()
        {
            _baseCharacter.Show();
            Console.WriteLine("获得装备2");

        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    public class DecoratorEquip3 : BaseCharacter
    {
        BaseCharacter _baseCharacter = null;
        public DecoratorEquip3(BaseCharacter baseCharacter)
        {
            _baseCharacter = baseCharacter;
        }
        public override void Show()
        {
            _baseCharacter.Show();
            Console.WriteLine("获得装备3");

        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    public class DecoratorEquip4 : BaseCharacter
    {
        BaseCharacter _baseCharacter = null;
        public DecoratorEquip4(BaseCharacter baseCharacter)
        {
            _baseCharacter = baseCharacter;
        }
        public override void Show()
        {
            _baseCharacter.Show();
            Console.WriteLine("获得装备4");

        }
    }
}

  使用装饰器模式

  Program:

using DecoratorPattern.Decorator;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            BaseCharacter character = new Mage();//新建一个法师角色
            character = new BaseDecorator(character);//给这个角色添加装饰器
            character = new DecoratorEquip1(character);//添加各种装备
            character = new DecoratorEquip2(character);
            character = new DecoratorEquip3(character);
            character = new DecoratorEquip4(character);
            character.Show();
            Console.Read();
        }
    }
}

 

posted @ 2018-06-28 18:56  wskxy  阅读(117)  评论(0编辑  收藏  举报