• 大话设计模式之外观模式


            年年作品展,岁岁不相同,鹅黄新绿涟漪泛起思想的火花却不尽相同。十期的作品展,从13年3月20号開始到完美落幕,时至今日,她已经在我的记忆中成为过去。这朵小小的浪花激起的涟漪渐渐褪去,或许已没有或许,但那抹如琉璃般的记忆也在这片平静中渐渐凝成永恒。当再次凝眸十一期的那群孩子,笑意浅浅,心事微澜。

    今天是十一期作品展的日子,看到她们多像去年的我。揣測激情与梦想来到这淡紫色蒲公英飞舞的土地。昨天晚上抽出时间去看了看十一期的作品展彩排,彩排的过程中,有五彩的灯光。有展示作品的大屏幕,投影仪,还有音响,在整个作品展示的过程中,十一期孩子的后勤人员中,有人负责关闭灯光和打开灯光。有人负责打开和关闭投影仪,一个个作品的衔接须要打开和关闭大屏幕,有的作品是音乐类的软件。这个时候就要控制音量,打开和关闭音响,咦?这一连串的流程怎么会如此熟悉,猛然间,恍惚。这个俨然就是我们大话设计中的外观模式啊。

             外观模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加easy使用。首先我们来看一下我们外观模式的结构图:

            

           依旧以我们的上述十一期作品展为例,来看看我们的类图:

           

           画好了类图。来看看我们代码是怎样实现的呢?我们先来看看灯光。投影仪。大屏幕。音响的代码:

            

    using System;
    namespace Facade 
    { 
        /// <summary> 
        // 投影仪 
        
        public class Projector 
        { 
            public void OpenProjector() 
            { 
                Console.WriteLine("打开投影仪"); 
            }
            public void CloseProjector() 
            { 
                Console.WriteLine("关闭投影仪"); 
            }
            
        }
         //灯光
         public class Light 
        { 
            public void OpenLight() 
            { 
                Console.WriteLine("打开灯光"); 
            }
            public void CloseLight() 
            { 
                Console.WriteLine("关闭灯光"); 
            } 
        } 
         
        //屏幕
         public class Screen 
        { 
            public void OpenScreen() 
            { 
                Console.WriteLine("打开屏幕"); 
            }
            public void CloseScreen() 
            { 
                Console.WriteLine("关闭屏幕"); 
            } 
        } 
        //音响
         public class  Acoustics  
        { 
            public void Acoustics  () 
            { 
                Console.WriteLine("打开音响"); 
            }
            public void CloseAcoustics  () 
            { 
                Console.WriteLine("关闭音响"); 
            } 
        } 
    }
             外观类中的代码:

       public class ProductionFacade 
        { 
            
            /// 在外观类中必须保存有子系统中各个对象 
             
            private Projector projector; 
            private Light  light; 
            private Screen screen; 
            private Acoustics   acoustics; 
            
            public ProductionFacade() 
            { 
                projector = new Projector(); 
                light = new Light(); 
                screen = new Screen(); 
                acoustics=new Acoustics();
               
            }
            /// <summary> 
            /// 作品開始
            /// <summary> 
            public void OpenProduction() 
            { 
                //先打开灯光
                light.OpenLight(); 
                //打开投影
                projector.OpenProjector(); 
                //再打开屏幕 
                screen.OpenScreen(); 
                //再打开音响
                acoustics.OpenAcoustics(); 
               
             }
            /// <summary> 
            /// 作品结束
            /// </summary> 
            public void CloseProduction() 
            { 
                //关闭灯光
                light.CloseLight(); 
                //关闭投影
                projector.CloseProjector(); 
                //关闭屏幕 
                screen.CloseScreen(); 
                //关闭音响
                acoustics.CloseAcoustics(); 
               
             }
           
        } 
    }
             client的代码:

     static void Main(string[] args) 
            { 
                Facade.ProductionFacade movie = new Facade.ProductionFacade(); 
                Facade.Projector projector = new Facade.Projector();
                    
                //首先是观看作品 
                movie.OpenProduction();
                Console.WriteLine();
                 
               
                //最后就是关闭作品了 
                movie.CloseProduction();
                Console.ReadKey(); 
            } 
           简单的说,就是外观模式将一个或者多个类的复杂的操作进行了隐藏。只显示一个一致的界面供client使用。须要注意的是。外观模式不过给我们提供了更为直接和easy地操作方式,她并没有把原来的子系统进行隔离。所以,假设你还须要子系统类的更高层的功能,还是能够使用原来的子系统,这个是外观模式的一大长处,通过外观模式能够将子系统的接口上建立一个高层接口,而且将这个高层接口提供给client使用,这样便开业解除掉client和复杂子系统之间的耦合。

             十一期的作品展今天晚上在学府拉开序幕。祝福你们。愿这朵小小的浪花在IT的海洋里激起惊涛骇浪,我的大话设计依旧在继续........

  • 相关阅读:
    12.7 Test
    51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)
    BZOJ.3675.[APIO2014]序列分割(DP 斜率优化)
    BZOJ.4515.[SDOI2016]游戏(树链剖分 李超线段树)
    BZOJ.3165.[HEOI2013]Segment(李超线段树)
    Linux系统CentOS进入单用户模式和救援模式详解
    KVM 管理界面挂载多UKEY
    挂载银行前置机Ukey到windows server2012虚拟机的操作记录
    为什么服务器做了raid 系统文件还会丢失?
    LVS+Keepalived深度理解,阐述你不知道的坑点
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7059584.html
Copyright © 2020-2023  润新知