zoukankan      html  css  js  c++  java
  • 设计模式のFacadePattern(外观模式)----结构模式

    一、产生背景

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

    这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

    二、一般做法

    Facade:负责子系统的的封装调用

    Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务

    三、实例

    1、子系统一

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace FacadePattern
    {
        /// <summary>
        /// 子系统1
        /// </summary>
        public class SubSystem1
        {
            public void Print1()
            {
                Console.WriteLine("SubSystem1");
            }
        }
    }

    2、子系统二

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace FacadePattern
    {
        /// <summary>
        /// 子系统1
        /// </summary>
        public class SubSystem2
        {
            public void Print2()
            {
                Console.WriteLine("SubSystem2");
            }
        }
    }

    3、外观

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace FacadePattern
    {
        /// <summary>
        ///  外观模式对外接口类
        /// </summary>
        public class Facade
        {
            private SubSystem1 _subSystem1;
            private SubSystem2 _subSystem2;
    
            public Facade()
            {
                _subSystem1 = new SubSystem1();
                _subSystem2 = new SubSystem2();
            }
    
            public void Print()
            {
                _subSystem1.Print1();
                _subSystem2.Print2();
            }
        }
    }

    4、客户端

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace FacadePattern
    {
        //外观模式
    
        class Program
        {
            static void Main(string[] args)
            {
                Facade facade = new Facade();
                facade.Print();
                Console.ReadLine();
            }
        }
    }

    四、设计模式分析

    优点:

    1. 外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。
    2. 外观模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件是紧耦合的。松耦合使得子系统的组件变化不会影响到它的客户。

    缺点:

    1. 如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了”开——闭原则“(不过这点也是不可避免)。
  • 相关阅读:
    HAProxy、Keepalived 在 Ocatvia 的应用实现与分析
    Octavia 的 HTTPS 与自建、签发 CA 证书
    Octavia 创建 loadbalancer 的实现与分析
    OpenStack Rally 质量评估与自动化测试利器
    自建 CA 中心并签发 CA 证书
    Failed building wheel for netifaces
    通过 vSphere WS API 获取 vCenter Datastore Provisioned Space 置备空间
    OpenStack Placement Project
    我们建了一个 Golang 硬核技术交流群(内含视频福利)
    没有图形界面的软件有什么用?
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/8510233.html
Copyright © 2011-2022 走看看