打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Decorator装饰模式

>>返回《C#常用设计模式》

1. 简介

  • 定义
    • 动态地给一个对象增加一些附属的职责。
    • 装饰装饰,自然的理解就是在原有物品的基础上(不改变原有物品),增加一些别的东西,让它变得更令人满意。
  • 类图

2. 示例

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

namespace WindowsFormsApplication1
{
    //client
    class Program
    {
        static void Main()
        {
            Hero hero = new BigHero();
            HeroShell s1 = new SpiderManShell(hero);
            HeroShell s2 = new SupperManShell(s1);
            s2.Attack();
            Console.ReadKey();
        }
    }
    //Component
    public abstract class Hero
    {
        public abstract void Attack();
    }
    //Decorator
    public abstract class HeroShell : Hero
    {
        private Hero _hero;

        public HeroShell(Hero hero)
        {
            _hero = hero;
        }

        public override void Attack()
        {
            _hero.Attack();
        }
    }

    //ConcreteDecoratorA
    public class SpiderManShell : HeroShell
    {
        public SpiderManShell(Hero hero) : base(hero) { }
        public override void Attack()
        {
            Console.WriteLine("织网");
            Console.WriteLine("撒网");
            base.Attack();
        }
    }
    //ConcreteDecoratorB
    public class SupperManShell : HeroShell
    {
        public SupperManShell(Hero hero) : base(hero) { }
        public override void Attack()
        {
            Console.WriteLine("我飞");
            Console.WriteLine("我裤衩反穿");
            base.Attack();
        }
    }

    //ConcreteComponent
    public class BigHero : Hero
    {

        public override void Attack()
        {
            Console.WriteLine("我是破坏者,BigHero");
        }
    }
}

2.1. 框架中的例子

// 泛型集合基接口 component:组成
public interface IEnumerable<out T> : IEnumerable
{ }

// 只读集合接口 decorator:装饰器
public interface IReadOnlyCollection<out T> : IEnumerable<out T>
{ }

// 集合接口 decorator:装饰器
public interface ICollection<T> : IEnumerable<T>
{ }

// 列表接口 decorator:装饰器
public interface IList<T> : ICollection<T>, IEnumerable<T>
{ }

// 列表 concrete-implement: 具体实现
public class List<T> : ICollection<T>, IEnumerable<T>, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, IList
{ }

// 队列 concrete-implement: 具体实现
public class Queue<T> : IEnumerable<T>, IReadOnlyCollection<T>, ICollection
{ }

// 链表 concrete-implement: 具体实现
public class LinkedList<T> : ICollection<T>, IEnumerable<T>, IReadOnlyCollection<T>,  IDeserializationCallback, ISerializable
{ }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#集合
VB.Net ArrayList类
C# ArrayList类
C# LINQ详解(一)
[ASP.NET MVC 小牛之路]02 - C#知识点提要
C#2.0介绍之Iterators(迭代器)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服