经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Decorator装饰模式
来源:cnblogs  作者:大师兄石头  时间:2021/2/18 15:34:42  对本文有异议

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

1. 简介

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

2. 示例

  1. using System;
  2. using
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace WindowsFormsApplication1
  7. {
  8. //client
  9. class Program
  10. {
  11. static void Main()
  12. {
  13. Hero hero = new BigHero();
  14. HeroShell s1 = new SpiderManShell(hero);
  15. HeroShell s2 = new SupperManShell(s1);
  16. s2.Attack();
  17. Console.ReadKey();
  18. }
  19. }
  20. //Component
  21. public abstract class Hero
  22. {
  23. public abstract void Attack();
  24. }
  25. //Decorator
  26. public abstract class HeroShell : Hero
  27. {
  28. private Hero _hero;
  29. public HeroShell(Hero hero)
  30. {
  31. _hero = hero;
  32. }
  33. public override void Attack()
  34. {
  35. _hero.Attack();
  36. }
  37. }
  38. //ConcreteDecoratorA
  39. public class SpiderManShell : HeroShell
  40. {
  41. public SpiderManShell(Hero hero) : base(hero) { }
  42. public override void Attack()
  43. {
  44. Console.WriteLine("织网");
  45. Console.WriteLine("撒网");
  46. base.Attack();
  47. }
  48. }
  49. //ConcreteDecoratorB
  50. public class SupperManShell : HeroShell
  51. {
  52. public SupperManShell(Hero hero) : base(hero) { }
  53. public override void Attack()
  54. {
  55. Console.WriteLine("我飞");
  56. Console.WriteLine("我裤衩反穿");
  57. base.Attack();
  58. }
  59. }
  60. //ConcreteComponent
  61. public class BigHero : Hero
  62. {
  63. public override void Attack()
  64. {
  65. Console.WriteLine("我是破坏者,BigHero");
  66. }
  67. }
  68. }

2.1. 框架中的例子

  1. // 泛型集合基接口 component:组成
  2. public interface IEnumerable<out T> : IEnumerable
  3. { }
  4. // 只读集合接口 decorator:装饰器
  5. public interface IReadOnlyCollection<out T> : IEnumerable<out T>
  6. { }
  7. // 集合接口 decorator:装饰器
  8. public interface ICollection<T> : IEnumerable<T>
  9. { }
  10. // 列表接口 decorator:装饰器
  11. public interface IList<T> : ICollection<T>, IEnumerable<T>
  12. { }
  13. // 列表 concrete-implement: 具体实现
  14. public class List<T> : ICollection<T>, IEnumerable<T>, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, IList
  15. { }
  16. // 队列 concrete-implement: 具体实现
  17. public class Queue<T> : IEnumerable<T>, IReadOnlyCollection<T>, ICollection
  18. { }
  19. // 链表 concrete-implement: 具体实现
  20. public class LinkedList<T> : ICollection<T>, IEnumerable<T>, IReadOnlyCollection<T>, IDeserializationCallback, ISerializable
  21. { }

原文链接:http://www.cnblogs.com/BigBrotherStone/p/decorator.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号