首页 > 其他分享 >08-Go设计模式-外观模式

08-Go设计模式-外观模式

时间:2022-10-08 16:48:58浏览次数:44  
标签:外观 fmt 子系统 Facade func Go new 设计模式 08

外观模式

示例代码
/*
外观模式
根据迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。
Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,
提供一个一致的简单的界面。这个一致的简单的界面被称作facade。


外观模式中角色和职责
Façade(外观角色):为调用方, 定义简单的调用接口。
SubSystem(子系统角色):功能提供者。指提供功能的类群(模块或子系统)。
*/

package _3_facade_pattern

import "fmt"

type SubSystemA struct{}

func (s *SubSystemA) MethodA() {
	fmt.Println("子系统方法A")
}

type SubSystemB struct{}

func (s *SubSystemB) MethodB() {
	fmt.Println("子系统方法B")
}

type SubSystemC struct{}

func (s *SubSystemC) MethodC() {
	fmt.Println("子系统方法C")
}

type SubSystemD struct{}

func (s *SubSystemD) MethodD() {
	fmt.Println("子系统方法C")
}

//外观模式,提供了一个外观类,简化成一个简单的接口供使用
type Facade struct {
	a *SubSystemA
	b *SubSystemB
	c *SubSystemC
	d *SubSystemD
}

func (f *Facade) MethodOne() {
	f.a.MethodA()
	f.b.MethodB()
}

func (f *Facade) MethodTwo() {
	f.c.MethodC()
	f.d.MethodD()
}

测试代码
package _3_facade_pattern

import (
	"fmt"
	"testing"
)

func TestMethod(t *testing.T) {
	//不用外观模式实现methodA和methodB
	sa := new(SubSystemA)
	sa.MethodA()
	sb := new(SubSystemB)
	sb.MethodB()

	//使用外观模式
	fmt.Println("-------------------")
	f := Facade{
		a: new(SubSystemA),
		b: new(SubSystemB),
		c: new(SubSystemC),
		d: new(SubSystemD),
	}
	//调用外观包裹的方法
	f.MethodOne()
}

标签:外观,fmt,子系统,Facade,func,Go,new,设计模式,08
From: https://www.cnblogs.com/lichengguo/p/16769381.html

相关文章

  • SARscape手动下载30mDEM(SRTM1 V3)切片数据-[EC: 40008]
    问题描述正常情况下,SARScape是可以自动下载DEM的,但国内的网络可能不太流畅。因此需要手动下载DEM切片。这个报错的代码是[EC:40008]。具体步骤1.打开​​SARscape​​​--......
  • 【GEE笔记4】GEE的数据下载和上传(Google Drive和Google Assets)
    虽然GEE有很多在线数据,但我们在使用的过程中有很多场景需要用到自己独有的数据,比如shp数据、csv数据等。GEE中,有多个存储空间​​GoogleDrive​​​​https://drive.google......
  • SQL2008下只有一个mdf文件如何恢复数据库
    一.这个库就是由1个mdf和1个ldf文件构成,ldf文件损坏;二.我的解题思路按照网上通用通用的思路:1、新建一个同名数据库。2、停止数据库服务,覆盖新建的数据库主文件(小技巧:......
  • 07-Go设计模式-适配模式
    适配模式示例代码/*适配器模式:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式中的角色和......
  • golang 使用 context 进行并发控制(转)
    转自以下两篇文章:并发控制-context篇、Go通关11:并发控制神器之Context1.前言context翻译成中文是”上下文”,即它可以控制一组呈树状结构的goroutine,由于goroutine派生......
  • 2022 ICPC网络赛(二) G Good Permutation(树形DP 排列组合 建树)
    2022ICPC网络赛(二)GGoodPermutation题意:​ 现在有一个长度为n的排列,现在给出m组约束条件,请问有多少种方案满足这个约束条件。​ 约束条件:给出l,r,表示\([l,r]\)这个......
  • ActiveMQ任意文件写入漏洞(CVE-2016-3088)
    搭建及运行漏洞环境:```docker-composebuilddocker-composeup-d```环境监听61616端口和8161端口,其中8161为web控制台端口,本漏洞就出现在web控制台中。访问`http://you......
  • 实践GoF的设计模式:访问者模式
    摘要:访问者模式的目的是,解耦数据结构和算法,使得系统能够在不改变现有代码结构的基础上,为对象新增一种新的操作。本文分享自华为云社区《【Go实现】实践GoF的23种设计模式:......
  • Django中如何使用Mysql数据库
    Django中如何使用Mysql数据库https://blog.csdn.net/weixin_47649808/article/details/126366088首先在项目settings.py的文件同目录下的 init.py文件里输入importp......
  • GooFlow入门使用
    这是用于Web端构建流程图的在线流程设计器,提供js版,Vue版,React版本,但是其为闭源项目。引入相关包<!--引入.css--><linkrel="stylesheet"type="text/css"href=".......