通俗易懂设计模式解析——外观模式

前言

  今天一起来看看外观模式,外观模式也是我们介绍的结构型设计模式的第五个模式了。外观外表,有句话是这么说的人靠衣装 佛靠金装。打扮的好,整理的好。外观靠上去整整齐齐,精气神一下就上来了。在开发中依然如此。客户端完成一个功能,可能需要调用许多的接口来配合。按照开发逻辑一个一个依次对接下来。客户端代码复杂,看上去一团糟。不说其他的,就表面上看起来就不怎么好吧。那么不如我们把调用的接口进行再次的封装。统一规范。这样整理下来。客户端就明了多了。

外观模式介绍

一、来由

  在软件系统开发中,我们经常会遇到客户端与内部子系统进行负责耦合的情况。从而导致客户端随着子系统的变化而变化。为了解决客户端与子系统直接的高耦合,并且简化接口的调用。也就有了外观模式。

二、意图

  为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

三、案例图

 

 

 

四、外观模式代码示例

  看上面我们发现外观模式包含以下角色:

    外观角色:在客户端调用外观角色的方法,其中与一个或多个子系统相关联。在运行情况下,客户端请求传递到外观角色然后传递给对应的子系统。

    子系统:在软件系统中包含一个或者多个子系统,子系统可以单独被客户端调用,子系统不知道外观角色的存在。相对而言,也可以当外观角色为客户端。

 

  我们看这么一个案例,通过案例我们来详细了解外观模式到底是怎么一回事以及如何运行的。例如我们现在有的软件系统。新用户在输入手机号填入验证码就登录注册都搞定了。同时还附加了一些第一次登录注册的奖励。如果不按外观模式来的话,我们在登录按钮后面的客户端依次调用了注册、登录、赠送奖励等等方法。那么我们看看外观模式如何解决呢:

 

namespace Facade_Pattern
{ 

    #region 外观角色
    public class FacadePattern
    {
        private RegisteredClass registeredClass;
        private LoginClass loginClass;
        private SendClass sendClass;
        public FacadePattern() 
        {
             registeredClass = new RegisteredClass();
            loginClass = new LoginClass();
            sendClass = new SendClass();
        }
        public  void LoginFirst() 
        {
            registeredClass.Registered();
            loginClass.Login();
            sendClass.Send();
        }
    }
    #endregion

    #region 子系统
    public class RegisteredClass 
    {
        public  void Registered() 
        {
            Console.WriteLine("注册成功");
        }
    }
    public class LoginClass 
    {
        public  void Login()
        {
            Console.WriteLine("登录成功");
        }
    }
    public class SendClass 
    {
        public  void Send()
        {
            Console.WriteLine("赠送成功");
        }
    }
    #endregion
}

 

    class Program
    {
        static void Main(string[] args)
        {
            //第一次注册登录
            FacadePattern facadePattern = new FacadePattern();
            facadePattern.LoginFirst();
             
        }
    }

 

使用场景及优缺点

  在软件开发中,外观模式提供了一个统一的接口,用来访问那么一群接口,相当与外观模式是一个高层接口,使子系统使用更加方便,避免了客户端与子系统之间的紧耦合。客户端直接通过调用外观角色就可以调用子系统中的方法了。

一、使用场景

1、为复杂的模块或子模块提供外界访问的模块

2、提供子系统的独立性

3、在层次分明的结构下可以使用外观模式提供入口。三层架构就是这样的

二、优点

1、减少了系统间的相互依赖

2、提高了灵活性,简化了接口,使用更加方便了

三、缺点

1、不符合开闭原则,如果要修改较为麻烦

总结

  到这里外观模式就介绍完了,外观模式为一个或者多个子系统提供一个统一的接口,该模式定义了一个高层,使得使用子系统更加方便容易。并且外观模式可以解决层次分离结构,降低客户端与子系统之间的耦合。对于外观模式侧重点是整个系统的一种架构设计,与之相比我们可以看看结构型的四种设计模式。适配器模式——注重接口转换,达到适配使用。桥接模式——注重分离现象与实现,并联合。装饰模式——注重动态的增加职责功能。组合模式——注重部分—整体,对对象进行扩展。

  人都有以第一印象定好坏的习惯,认为一个人好时,就会爱屋及乌,认为一个人不好时,就会全盘否认。

    C#设计模式系列目录

欢迎大家扫描下方二维码,和我一起踏上设计模式的闯关之路吧!

  

posted @ 2019-09-06 09:16  小世界的野孩子  阅读(688)  评论(2编辑  收藏
回到顶部