zoukankan      html  css  js  c++  java
  • 设计模式(三)——装饰器模式(Decorator Pattern)

    发现太过于刻意按照计划来写博客,有点不实际,刚好最近在一个网课上复习AOP的知识,讲到了装饰器模式和代理模式,顺便复习总结一下。

    首先了解一下装饰器模式,从名字里面可以看出来,装饰器模式就类似于房子装潢吧,比如刚买的毛坯房,只有一个没有门,直接就可以进去。

    首先设计一个房子类Room,实现一个进入方法Access

        /// <summary>
        /// 抽象接口 用来进行约束
        /// </summary>
        public interface IAccess
        {
            void Access();
        }
        /// <summary>
        /// 用户类
        /// </summary>
        public class Room: IAccess
        {
            /// <summary>
            /// 进入房子操作
            /// </summary>
            public void Access() {
                Console.WriteLine("进房子了");
            }
        }

    那么现在这个类就拥有了进入房子的功能了,那么后期我们需求变更,这个房子加了一个门,那这样我就需要多一个开门的功能了,但是我又不想改变room这个类,那么需要怎么做呢,这个时候就可以用到装饰器模式了

    这里定义一个门Door类,添加开门关门方法

        /// <summary>
        /// 门类
        /// </summary>
        public class Door : IAccess
        {
            Room room;
    
            public Door(Room room)
            {
                this.room = room;
               
            }
            public void Access() {
                OpenDoor();
                room.Access();
                CloseDoor();
            }
            public void OpenDoor() {
                Console.WriteLine("进门前开门");
            }
            public void CloseDoor()
            {
                Console.WriteLine("进门后关门");
            }
        }

    这样,在进入房子的操作外面就加了开门关门两个操作了,然后还没有改变原有的代码结构,这种自由组合的模式,就叫做装饰器模式。

    有句话叫组合是优于继承的,我的理解是,继承首先的问题是,类之间的关联是强关联的,属于入侵式,需要改变原有的功能代码结构,但是:添加新功能,不应该影响原有功能。

    装饰器模式的好处:灵活、拓展性好、能够在不影响原有业务的情况下添加新的功能。

    缺点:增加了系统的复杂度。

    应用场景:AOP的实现

     

  • 相关阅读:
    ASP.NET MVC 1.0 + spring.net 1.2.0.20288 + NHibernate 2.0.1.4000整合笔记(一)——准备工作
    OpenWRT 编译过程
    XNA 3D模型入门讲解(一)
    Windows Phone7 中实现主从视图
    MVVM之ViewModel
    XNA 三维入门讲解
    WF 4.0 之持久化操作二:Xml方式的存储
    Nhibernate下使用Oracle提示 “Could not create the driver from NHibernate.Driver.OracleDataClientDriver”
    Win8 :修改默认的初始屏幕背景
    Javascript中单引号和双引号引发的悲剧
  • 原文地址:https://www.cnblogs.com/yuchenghao/p/11980237.html
Copyright © 2011-2022 走看看