[设计模式 Go实现] 结构型~外观模式

API 为facade 模块的外观接口,大部分代码使用此接口简化对facade类的访问。

facade模块同时暴露了a和b 两个Module 的NewXXX和interface,其它代码如果需要使用细节功能时可以直接调用。

facade.go
package facade

import "fmt"

func NewAPI() API {
   
    return &apiImpl{
   
        a: NewAModuleAPI(),
        b: NewBModuleAPI(),
    }
}

//API is facade interface of facade package
type API interface {
   
    Test() string
}

//facade implement
type apiImpl struct {
   
    a AModuleAPI
    b BModuleAPI
}

func (a *apiImpl) Test() string {
   
    aRet := a.a.TestA()
    bRet := a.b.TestB()
    return fmt.Sprintf("%s\n%s", aRet, bRet)
}

//NewAModuleAPI return new AModuleAPI
func NewAModuleAPI() AModuleAPI {
   
    return &aModuleImpl{
   }
}

//AModuleAPI ...
type AModuleAPI interface {
   
    TestA() string
}

type aModuleImpl struct{
   }

func (*aModuleImpl) TestA() string {
   
    return "A module running"
}

//NewBModuleAPI return new BModuleAPI
func NewBModuleAPI() BModuleAPI {
   
    return &bModuleImpl{
   }
}

//BModuleAPI ...
type BModuleAPI interface {
   
    TestB() string
}

type bModuleImpl struct{
   }

func (*bModuleImpl) TestB() string {
   
    return "B module running"
}
facade_test.go
package facade

import "testing"

var expect = "A module running\nB module running"

// TestFacadeAPI ...
func TestFacadeAPI(t *testing.T) {
   
    api := NewAPI()
    ret := api.Test()
    if ret != expect {
   
        t.Fatalf("expect %s, return %s", expect, ret)
    }
}

相关推荐

  1. [设计模式 Go实现] 结构外观模式

    2024-01-08 13:52:01       47 阅读
  2. GO设计模式——12、外观模式结构

    2024-01-08 13:52:01       65 阅读
  3. 设计模式结构模式外观模式

    2024-01-08 13:52:01       49 阅读
  4. [设计模式 Go实现] 结构~适配器模式

    2024-01-08 13:52:01       49 阅读
  5. [设计模式 Go实现] 结构~装饰模式

    2024-01-08 13:52:01       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-08 13:52:01       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-08 13:52:01       97 阅读
  3. 在Django里面运行非项目文件

    2024-01-08 13:52:01       78 阅读
  4. Python语言-面向对象

    2024-01-08 13:52:01       88 阅读

热门阅读

  1. 2024年超详细的Python3学习路径规划

    2024-01-08 13:52:01       50 阅读
  2. vue项目获取 iframe 中的DOM元素

    2024-01-08 13:52:01       59 阅读
  3. android常用方法

    2024-01-08 13:52:01       69 阅读
  4. 【Spring Boot 3】【数据源】自定义JDBC数据源

    2024-01-08 13:52:01       51 阅读
  5. DevOps(5)

    2024-01-08 13:52:01       58 阅读
  6. oracle数据迁移到mysql

    2024-01-08 13:52:01       65 阅读