随风逐叶 随风逐叶
首页
  • Quick Reference (opens new window)
  • EgretEngine开发者文档 (opens new window)
  • TinaX框架
  • SSH教程
  • VSCode插件开发
关于
  • 分类
  • 标签
  • 归档

rontian

从事游戏开发10多年的老菜鸟一枚!
首页
  • Quick Reference (opens new window)
  • EgretEngine开发者文档 (opens new window)
  • TinaX框架
  • SSH教程
  • VSCode插件开发
关于
  • 分类
  • 标签
  • 归档
  • 框架简介
  • TinaX.Core
  • 基于TinaX创建一个扩展库
  • TinaX.VFS
  • TinaX.UIKit
  • TinaX.I18N
  • TinaX.Lua
  • XLua

  • Google.Protobuf
  • Lua-Protobuf
  • 一些优秀的第三方库

    • CatLib

      • 简介
      • 风格指南
      • 常见问题
      • 已知BUG
      • 更新日志
      • 服务提供者
      • 应用程序
      • 服务容器
      • 服务门面
        • 实现门面
        • 使用门面
        • 门面的工作原理
        • 合理使用门面
        • 门面与静态函数
      • 事件系统
      • 数组
      • 字符串
      • 守卫
      • 有序集
      • 环形缓冲流
      • 包装流
      • 组合流
      • 分片流
    • UniRx

    • UniTask

目录

服务门面

# 服务门面

门面模式(Facade)又称外观模式,用于为子系统中的一组接口提供一个一致的界面。

门面模式定义了一个高层接口,这个接口使得子系统更加容易使用:引入门面角色之后,用户只需要直接与门面角色交互,用户与子系统之间的复杂关系由门面角色来实现,从而降低了系统的耦合度。

# 实现门面

您只需要继承自CatLib.Facade即可实现门面。

namespace Foo.Facades
{
    public class FileSystem : Facade<IFileSystem>
    {
    }
}
1
2
3
4
5
6

# 使用门面

使用门面是非常简单的,您只需要访问门面下的That即可访问对应实现。

using Foo.Facades;

FileSystem.That.HelloWorld(); // 输出: hello world
1
2
3

通过代码生成技术,可以将门面调用简化到FileSystem.HelloWorld()

# 门面的工作原理

门面是一个为容器中对象,提供访问方式的类。该机制原理由CatLib.Facade类实现。

门面类只需要提供服务的接口类型。Facade底层会通过这个服务接口来向容器请求服务的实现,并且将其缓存,以达到和源生代码一致的性能。

服务实现发生变更时,门面会自动更新服务实现。

# 合理使用门面

门面有诸多优点,其提供了简单、易记的语法,让我们无需记住长长的类名即可使用服务提供的功能特性。

但是,使用门面也有需要注意的地方,一个最主要的危险就是类范围蠕变。由于门面如此好用并且不需要注入,在单个类中使用过多门面,会让类很容易变得越来越大。使用依赖注入则会让此类问题缓解,因为一个巨大的构造函数会让我们很容易判断出类在变大。因此,使用门面的时候要尤其注意类的大小,以便控制其有限职责。

# 门面与静态函数

门面为服务容器中的绑定类提供了一个静态接口。

CatLib 的门面作为服务容器中底层类的静态代理,相比于传统静态方法,在维护时能够提供更加易于测试、灵活、及简明优雅。

上次更新: 2023/10/17, 17:20:06 访问次数: 0
服务容器
事件系统

← 服务容器 事件系统→

最近更新
01
一些Shell常用的功能写法整理
10-20
02
删除git仓库submodule的步骤
10-20
03
django基本命令
10-16
更多文章>
Copyright © 2017-2025 随风逐叶
沪ICP备18008791号-1 | 沪公网安备31011502401077号

网站访问总次数: 0次
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式