大话设计模式之外观模式

简介:         年年作品展,岁岁不同样,鹅黄新绿涟漪泛起思想的火花却不尽相同,十期的作品展,从13年3月20号开始到完美落幕,时至今日,她已经在我的记忆中成为过去,这朵小小的浪花激起的涟漪渐渐褪去,也许已没有也许,但那抹如琉璃般的记忆也在这片平静中渐渐凝成永恒。
        年年作品展,岁岁不同样,鹅黄新绿涟漪泛起思想的火花却不尽相同,十期的作品展,从13年3月20号开始到完美落幕,时至今日,她已经在我的记忆中成为过去,这朵小小的浪花激起的涟漪渐渐褪去,也许已没有也许,但那抹如琉璃般的记忆也在这片平静中渐渐凝成永恒。当再次凝眸十一期的那群孩子,笑意浅浅,心事微澜。今天是十一期作品展的日子,看到她们多像去年的我,揣测激情与梦想来到这淡紫色蒲公英飞舞的土地。昨天晚上抽空去看了看十一期的作品展彩排,彩排的过程中,有五彩的灯光,有展示作品的大屏幕,投影仪,还有音响,在整个作品展示的过程中,十一期孩子的后勤人员中,有人负责关闭灯光和打开灯光,有人负责打开和关闭投影仪,一个个作品的衔接需要打开和关闭大屏幕,有的作品是音乐类的软件,这个时候就要控制音量,打开和关闭音响,咦?这一连串的流程怎么会如此熟悉,猛然间,恍惚,这个俨然就是我们大话设计中的外观模式啊。

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

        

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

       

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

        

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(); 
           
         }
       
    } 
}
         客户端的代码:

 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(); 
        } 
       简单的说,就是外观模式将一个或者多个类的复杂的操作进行了隐藏,只显示一个一致的界面供客户端使用。需要注意的是,外观模式仅仅是给我们提供了更为直接和容易地操作方式,她并没有把原来的子系统进行隔离,所以,如果你还需要子系统类的更高层的功能,还是可以使用原来的子系统,这个是外观模式的一大优点,通过外观模式可以将子系统的接口上建立一个高层接口,并且将这个高层接口提供给客户端使用,这样便开业解除掉客户端和复杂子系统之间的耦合。

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

目录
相关文章
|
6月前
|
设计模式 API 数据安全/隐私保护
探索设计模式的魅力:外观模式简化术-隐藏复杂性,提供简洁接口的设计秘密
外观模式是一种关键的设计模式,旨在通过提供一个简洁的接口来简化复杂子系统的访问。其核心价值在于将复杂的内部实现细节封装起来,仅通过一个统一的外观对象与客户端交互,从而降低了系统的使用难度和耦合度。在软件开发中,外观模式的重要性不言而喻。它不仅能够提高代码的可读性、可维护性和可扩展性,还能促进团队间的协作和沟通。此外,随着业务需求和技术的发展,外观模式能够适应变化,通过修改外观对象来灵活调整客户端与子系统之间的交互方式。总之,外观模式在软件设计中扮演着举足轻重的角色,是构建高效、稳定且易于维护的软件系统的关键
180 1
探索设计模式的魅力:外观模式简化术-隐藏复杂性,提供简洁接口的设计秘密
|
6月前
|
设计模式 Java
23种设计模式,外观模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】外观模式(Facade Pattern)是一种使用频率非常高的结构型设计模式,其核心思想是为子系统中的一组接口提供一个一致的界面。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简而言之,外观模式就是客户端与复杂子系统之间的一个简单而统一的接口
78 3
|
6月前
|
设计模式 存储 uml
C++ 设计模式实战:外观模式和访问者模式的结合使用,派生类访问基类的私有子系统
C++ 设计模式实战:外观模式和访问者模式的结合使用,派生类访问基类的私有子系统
69 1
|
2月前
|
设计模式 Java
Java设计模式-外观模式(11)
Java设计模式-外观模式(11)
|
1月前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
29 0
|
3月前
|
设计模式 存储 Java
【九】设计模式~~~结构型模式~~~外观模式(Java)
文章详细介绍了外观模式(Facade Pattern),这是一种对象结构型模式,通过引入一个外观类来简化客户端与多个子系统之间的交互,降低系统的耦合度,并提供一个统一的高层接口来使用子系统。通过文件加密模块的实例,展示了外观模式的动机、定义、结构、优点、缺点以及适用场景,并讨论了如何通过引入抽象外观类来提高系统的可扩展性。
【九】设计模式~~~结构型模式~~~外观模式(Java)
|
4月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 外观模式
js设计模式【详解】—— 外观模式
37 2
|
6月前
|
设计模式
设计模式-外观模式
设计模式-外观模式
56 0
|
5月前
|
设计模式 Java
Java设计模式:外观模式之优雅门面(九)
Java设计模式:外观模式之优雅门面(九)
|
5月前
|
设计模式 Java
Java设计模式之外观模式详解
Java设计模式之外观模式详解