首页 > 其他分享 >07-Go设计模式-适配模式

07-Go设计模式-适配模式

时间:2022-10-08 15:58:06浏览次数:43  
标签:适配 适配器 接口 Phone func Go 设计模式 Adapter

适配模式

示例代码
/*
适配器模式: 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。


适配器模式中的角色和职责
Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,
在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,
包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。
*/

package _2_adaptation_pattern

import "fmt"

//适配的目标
type V5 interface {
	Use5V()
}

//业务类,依赖v5接口
type Phone struct {
	v V5
}

func NewPhone(v V5) *Phone {
	return &Phone{
		v,
	}
}

func (p *Phone) Charge() {
	fmt.Println("Phone进行充电...")
	p.v.Use5V()
}

//被适配的角色,适配者
type V220 struct{}

func (v *V220) Use220V() {
	fmt.Println("使用220V的电压")
}

//电源适配器
type Adapter struct {
	v220 *V220
}

func (a *Adapter) Use5V() {
	fmt.Println("使用适配器进行充电")

	//调用适配者的方法
	a.v220.Use220V()
}

func NewAdapter(v220 *V220) *Adapter {
	return &Adapter{
		v220,
	}
}

测试代码
package _2_adaptation_pattern

import "testing"

func TestPhone(t *testing.T) {
	iphone := NewPhone(NewAdapter(new(V220)))

	iphone.Charge()
}

标签:适配,适配器,接口,Phone,func,Go,设计模式,Adapter
From: https://www.cnblogs.com/lichengguo/p/16769167.html

相关文章

  • golang 使用 context 进行并发控制(转)
    转自以下两篇文章:并发控制-context篇、Go通关11:并发控制神器之Context1.前言context翻译成中文是”上下文”,即它可以控制一组呈树状结构的goroutine,由于goroutine派生......
  • 2022 ICPC网络赛(二) G Good Permutation(树形DP 排列组合 建树)
    2022ICPC网络赛(二)GGoodPermutation题意:​ 现在有一个长度为n的排列,现在给出m组约束条件,请问有多少种方案满足这个约束条件。​ 约束条件:给出l,r,表示\([l,r]\)这个......
  • 实践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=".......
  • Java设计模式 —— 桥接模式
    8桥接模式8.1桥接模式概述BridgePattern:将抽象部分与它的实现部分解耦,使得两者都能够独立变化。桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独......
  • 【nginx】使用 sub_filter 注入 js 代码,例如 google analysis 等
    目录1.创建GA12.注入代码2结果网站F12GA控制台Reference在一项工作中,已经将内网的一个网站通过二级域名+nginx+frp的方式映射到公网。网站并不属于我来管理,当......
  • 设计模式-命令模式
    给其他模块下达命令,好,这个命令模式啊,就是说是,也不说它的一个场景了,先讲它的这个模式它实现的,这么一个,整个模式实现的方式,这个模式的代码结构大概是怎么样的,然后我再讲一下......
  • MongoDB基本使用
    MongoDB基本使用1.创建数据库MongoDB创建数据库的语法格式如下:useDATABASE_NAME如果数据库不存在,则创建数据库,否则切换到指定数据库。实例以下实例我们创建了数据库youj:......
  • MongoDB Could not find host matching read preference { mode: “primary” } 问题
       导致原因:集群有12w+的collection需要尽快解决collection过多的问题方可解决......