外观模式

2021/11/24 23:10:34

本文主要是介绍外观模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

编辑说明

概述

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,为这个接口使用

外观模式也可以叫为门面模式,应用场景也比较明确,主要在接口设计方面使用

结构图

代码实现

子系统

    /// <summary>
    /// 子系统一
    /// </summary>
    public class SubSystemOne
    {
        public void MethodOne()
        {
            Console.WriteLine(" 子系统方法一");
        }
    }
    /// <summary>
    /// 子系统二
    /// </summary>
    public class SubSystemTwo
    {
        public void MethodTwo()
        {
            Console.WriteLine(" 子系统方法二");
        }
    }
    /// <summary>
    /// 子系统三
    /// </summary>
    class SubSystemThree
    {
        public void MethodThree()
        {
            Console.WriteLine(" 子系统方法三");
        }
    }
    /// <summary>
    /// 子系统四
    /// </summary>
    public class SubSystemFour
    {
        public void MethodFour()
        {
            Console.WriteLine(" 子系统方法四");
        }
    }

 

外观类

  /// <summary>
    /// 外观类
    /// </summary>
    public class Facade
    {
        SubSystemOne one;
        SubSystemTwo two;
        SubSystemThree three;
        SubSystemFour four;

        public Facade()
        {
            one = new SubSystemOne();
            two = new SubSystemTwo();
            three = new SubSystemThree();
            four = new SubSystemFour();
        }

        public void MethodA()
        {
            Console.WriteLine("\n方法组A() ---- ");
            one.MethodOne();
            two.MethodTwo();
            four.MethodFour();
        }

        public void MethodB()
        {
            Console.WriteLine("\n方法组B() ---- ");
            two.MethodTwo();
            three.MethodThree();
        }
    }

 

客户端

    class Program
    {
        static void Main(string[] args)
        {
            Facade facade = new Facade();
            facade.MethodA();
            facade.MethodB();
            Console.Read();
        }
    }

运行结果

 

 

优势

符合迪米特法则(最少知识原则)

隐藏系统的复杂性,提供精简的访问方法,让高层模块可以更加容易地间接调用这些子系统的功能。

减少系统相互依赖

提高灵活性

提高了安全性

降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程

使用场景

阶段各种第三方SDK、开源类库的使用

为复杂的模块或子系统提供外界访问的模块。

子系统相对独立。

预防低水平人员带来的风险。

解决易用性问题

通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高  客户端的响应速度

解决分布式事务问题。让两个不同的接口达到事务执行要引入很多机制非常复杂,要是再用一个接口包裹这来两个接口来做处理就会比较简单

缺陷

不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

Demo



这篇关于外观模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程