Decorator装饰模式

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

  • 1. 简介
  • 2. 示例
    • 2.1. 框架中的例子

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
{ }
(0)

相关推荐

  • Linq扩展方法

    如果要扩展LINQ查询方法集,只需要为IEnumerable<T>扩展方法. 第一种:扩展聚合方法,类似已有的Max.Min,可以给具体类型扩展,也可以给泛型扩展. using Syste ...

  • C# 7

    public static class StringHelper { public static bool IsCapitalized(this string str) { if(string.IsN ...

  • 拿 C# 搞函数式编程 - 3

    前言 今天和某个人聊天聊到了 C# 的 LINQ,发现我认识的 LINQ 似乎和大多数人认识的 LINQ 不太一样,怎么个不一样法呢?其实 LINQ 也可以用来搞函数式编程. 当然,并不是说写几个 l ...

  • C#中IEnumerable<T>.Select()、SelectMany()的简单使用

    public class Person { public string Name { get; set; } public string Gender { get; set; } public int ...

  • C#设计模式学习笔记:(8)装饰模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7723225.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第三个模式--装 ...

  • C#设计模式-装饰器模式(Decorator Pattern)

    引言 当我们完成一个软件产品开发后就需要对其进行各种测试,适配快速迭代下质量的保障.当有一个完善的产品的对象后,如果我们想要给他添加一个测试功能,那么我们可以用一个新的类去装饰它来实现对原有对象职责的 ...

  • 详解JAVA面向对象的设计模式 (七)、装饰模式

    装饰模式 Decorator 装饰模式比较简单,我就不单独写实现例子了.参考设计图去实现不是什么问题.建议可以写一写找找感觉. 在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修.相 ...

  • 设计模式(9) 装饰模式

    装饰模式 装饰模式的特点 动态撤销功能 装饰模式可以动态向一个现有的对象添加新的功能,同时又不改变其结构.就增加功能来说,使用继承的方式生成子类也可以达到目的,但随着扩展功能的不断增加,子类的数量会快 ...

  • 大话设计-装饰模式

    装饰模式的核心:被装饰对象(最原始),装饰对象(带有装饰功能的被装饰对象). 假设有一个被装饰对象叫"ConcreteComponent ",两个装饰对象叫"Concre ...

  • 大话设计模式笔记(四)の装饰模式

    举个栗子 问题描述 可以给人搭配嘻哈服或白领装的程序. 简单实现 代码 /** * 人类 * Created by callmeDevil on 2019/6/23. */ public class ...

  • 设计模式-装饰模式学习笔记

    装饰模式(结构型模式) 装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.[DP] 自己的理解:在不对原有类进行修改的情况下动态的对它进行 ...

  • 结构型模式:装饰模式

    简介 姓名 :装饰模式 英文名 :Decorator Pattern 价值观 :人靠衣装,类靠装饰 个人介绍 : Attach additional responsibilities to an ob ...

  • 装饰模式

    大家好,我叫小赵,现任职藏剑山庄高级铸剑师,今天抽空跟大家唠唠嗑,希望能赚几个点击,赚几个关注. 我们山庄每天都会出很多货,每把武器打造出来之后,会进行包装,因为大众化的口味总是需要各种各样的点缀,因 ...