首页 > 其他分享 >【golang设计模式】—— 外观模式

【golang设计模式】—— 外观模式

时间:2024-07-26 18:08:05浏览次数:14  
标签:外观 return string 模式 golang func 设计模式 客户端

模式定义

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

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

模式结构

外观模式包含以下几个主要角色:

    • 外观(Facade):
      • 提供一个简化的接口,封装了系统的复杂性。外观模式的客户端通过与外观对象交互,而无需直接与系统的各个组件打交道。
  • 子系统(Subsystem):
    • 由多个相互关联的类组成,负责系统的具体功能。外观对象通过调用这些子系统来完成客户端的请求。
  • 客户端(Client):
    • 使用外观对象来与系统交互,而不需要了解系统内部的具体实现。

模式优点

  • 减少依赖:客户端与子系统之间的依赖减少。
  • 提高灵活性:子系统的内部变化不会影响客户端。
  • 增强安全性:隐藏了子系统的内部实现,只暴露必要的操作。

模式缺点

  • 违反开闭原则:对子系统的修改可能需要对外观类进行相应的修改。

使用场景

  • 当客户端不需要了解系统内部的复杂逻辑和组件交互时。
  • 当需要为整个系统定义一个清晰的入口点时。

应用实例

  • Java的MVC架构:通过外观模式,可以简化对表示层、业务逻辑层和数据访问层的访问。

示例代码

package practise

  

import "fmt"

  

/*

外观模式

*/

  

// 相当于MVC中的controller,暴露出来一个api接口,使用该接口调用不同service层的方法,相当于外观。

type API interface {

    Test() string

}

  

func NewAPI() API {

    return &apiTmpl{

        a: NewAModuleAPI(),

        b: NewBModuleAPI(),

    }

}

  

type apiTmpl struct {

    a AModuleAPI

    b BModuleAPI

}

  

func (a *apiTmpl) Test() string {

    aString := a.a.TestA()

    bString := a.b.TestB()

    return fmt.Sprintf("\na:%s\nb:%s", aString, bString)

}

  

// AModuleAPI 和 BModuleAPI 相当于service层不同的api,例如用户api、文章api

type AModuleAPI interface {

    TestA() string

}

  

type BModuleAPI interface {

    TestB() string

}

  

type aModule struct{}

  

type bModule struct{}

  

func (a *aModule) TestA() string {

    return "a module"

}

  

func (b *bModule) TestB() string {

    return "b module"

}

  

func NewAModuleAPI() AModuleAPI {

    return &aModule{}

}

  

func NewBModuleAPI() BModuleAPI {

    return &bModule{}

}
package main

  

import (

    "fmt"

    "practise/practise"

)

  

func main() {

    api := practise.NewAPI()

    fmt.Println("result:", api.Test())

}

标签:外观,return,string,模式,golang,func,设计模式,客户端
From: https://www.cnblogs.com/kafka-embracetheday/p/18325972

相关文章

  • Golang常见的并发模式
    Golang常见的并发模式Go语言最吸引人的地方是它内建的并发支持首先要明确一个概念:并发不是并行。并发更关注的是程序的设计层面,并发的程序完全是可以顺序执行的,只有在真正的多核CPU上才可能真正地同时运行。并行更关注的是程序的运行层面,并行一般是简单的大量重复,例如GPU......
  • 【golang设计模式】—— 简单工厂模式
    模式定义简单工厂模式(SimpleFactoryPattern):又称为静态工厂方法(StaticFactoryMethod)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。模式结构工......
  • C++设计模式汇总
    李忠建老师讲授设计模式笔记更新到抽象工厂模式:组件协作类:模板方法策略模式观察者模式单一职责类:装饰器模式桥模式模式对象创建类:工厂方法抽象工厂方法原型模式构建器模式对象性能类:单例模式享元模式接口隔离类:门面模式代理模式适配器模式中介者模式状态变......
  • 设计模式C++001__模板方法
    设计模式C++001__模板方法“组件协作”模式:现代软件专业分工之后的第一个结果就是“框架与应用程序的划分”,组件“协作”模式通过晚绑定,来实现框架与应用程序之间的松耦合。包括:模版方法,观察者模式,策略模式1、模板方法模式:动机:在软件构建过程中,对于一项任务,它常常有稳定的整......
  • 设计模式C++002__策略模式
    设计模式C++002__策略模式1、动机:在软件构建过程中,某些对象使用的算法是多种多样的,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。?如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?......
  • 设计模式C++003__观察者模式
    设计模式C++003__观察者模式1、动机:在软件构建过程中,我们需要为某些对象建立一种“通过依赖关系”--一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使得软件不好抵御变化。?使用面向对象技术,可以将这种依赖关系弱化,并形成......
  • 设计模式C++004__装饰器模式
    设计模式C++004__装饰器模式在软件组件设计中,如果职责划分不清晰,使用继承得到的结果往往会随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候关键是划清责任。单一职责模式分类中的设计模式:装饰器模式,桥模式1、装饰器模式:动机:在某些情况下,我们可能会“过渡地使用继承来扩......
  • 设计模式C++005__桥模式
    设计模式C++005__桥模式也是组合模式的具体体现。1、动机:由于某些类型的古有的实现逻辑,使得他们具有两个变化的维度,乃至多个维度的变化。?如何应对这种“多维度的变化”,如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度。2、桥模式:将......
  • 设计模式C++007__抽象工厂方法模式
    设计模式C++007__抽象工厂方法模式抽象工厂方法1、动机:在软件系统重,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。?如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种封装机制,来避免客户程序和这种“多系列具体对象......
  • 设计模式总结:适配器、桥接、组合和迭代器模式
    在之前的对话中,我们讨论了五种常见的Java设计模式:单例、工厂、策略、装饰器和观察者模式。现在,让我们继续探索其他四种设计模式:适配器、桥接、组合和迭代器模式。适配器模式概念:适配器模式是一种结构型设计模式,用于将一个类的接口转换为另一个类期望的接口。适配器模式......