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

前言

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

外观模式介绍

1、来由

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

2、意图

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

3、案例图

4、外观模式代码示例

  看上面咱们发现外观模式包含如下角色:spa

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

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

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

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();
             
        }
    }复制代码

使用场景及优缺点

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

1、使用场景

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

二、提供子系统的独立性对象

三、在井井有条的结构下可使用外观模式提供入口。三层架构就是这样的

2、优势

一、减小了系统间的相互依赖

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

3、缺点

一、不符合开闭原则,若是要修改较为麻烦

总结

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

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

相关文章
相关标签/搜索