装饰器模式
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(); } } }

浙公网安备 33010602011771号