此篇中,主要练习的是适配器模式。具体可以看(http://www.runoob.com/design-pattern/adapter-pattern.html)

package mainimport ("fmt"
   "strings"
)func main() {play := AudioPlayer{}play.play("mp4","老人与海.mp4")
}type MediaPlayer interface{play(audioType string,audioName string)
}type AdvancedMediaPlayer interface {playVlc(audioName string)playMp4(audioName string)
}type Vlc struct {
}func (v Vlc) playVlc(audioName string)  {fmt.Println("vlc play:",audioName)
}
func (v Vlc) playMp4(audioName string)  {fmt.Println("vlc play:",audioName)
}type Mp4 struct {}
func (m Mp4) playVlc(audioName string)  {fmt.Println("vlc play:",audioName)
}
func (m Mp4) playMp4(audioName string)  {fmt.Println("mp4 play:",audioName)
}type MediaAdapter struct {AdvancedMediaPlayer AdvancedMediaPlayer
}func (ma *MediaAdapter) MediaAdapter(audioType string)  {if strings.ToUpper(audioType) == "VLC"{ma.AdvancedMediaPlayer = Vlc{}}else {ma.AdvancedMediaPlayer = Mp4{}}
}func (ma *MediaAdapter) play(audioType string,audioName string)  {if strings.ToUpper(audioType) == "VLC"{ma.AdvancedMediaPlayer.playVlc(audioName)}else {ma.AdvancedMediaPlayer.playMp4(audioName)}
}type AudioPlayer struct {MediaAdapter MediaAdapter
} func (ap *AudioPlayer) play(audioType string,audioName string)  {if strings.ToUpper(audioType) == "VLC" || strings.ToUpper(audioType) == "MP4"{ap.MediaAdapter = MediaAdapter{}ap.MediaAdapter.MediaAdapter(audioType)ap.MediaAdapter.play(audioType,audioName)}
}

适配器模式-golang相关推荐

  1. golang不编译.html,golang之条件编译

    Go语言能够经过go/build包里定义的tags和命名约定来让Go的包能够运行不一样的代码.html 标签编译 在源代码里添加标注,一般称之为编译标签(build tag).编译标签采用靠近源代码文 ...

  2. Golang知识点总结

    数据结构 Context Context的调用链: 和链表有点像,只是它的方向相反:Context 指向它的父节点,链表则指向下一个节点 重要概念:(源码位置:src/context/context. ...

  3. DDD系列 实战一 应用设计案例 (golang)

    DDD系列 实战一 应用设计案例 (golang) 基于 ddd 的设计思想, 核心领域需要由纯内存对象+基础设施的抽象的接口组成 独立于外部框架: 比如 web 框架可以是 gin, 也可以是 be ...

  4. golang设计模式介绍(内含各个模式的java对比)代码解读

    golang设计模式介绍 设计模式是面向对象软件的经验,是通常设计问题的解决方案,每一种设计模式系统的命名,解释和评价了面向对象中一个重要的和重复出现的设计. 以下一一介绍这些设计模式 1.1工厂设计 ...

  5. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  6. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  7. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

  8. 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发

    基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...

  9. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

最新文章

  1. java项目新东方在线源码_基于JSP的在线考试系统-JavaWeb项目-有源码
  2. linux查询引脚功能复用,Linux:使用pinctrl子系统动态切换复用pin脚的功能
  3. C++和Python,JSON文件的读取和保存
  4. URL请求到Action的映射规则
  5. CCF2015-12-2 消除类游戏
  6. 版本控制工具——subversion
  7. 大数据中心大数据资源平台建设方案
  8. android 静默暗转_Android PackageInstaller 静默安装的实现
  9. bilibilidown 生成证书_哔哩哔哩(bilibili)助手
  10. 第十篇:扩展SOUI的控件及绘图对象(ISkinObj)
  11. rrd java_golang 使用rrd的相关资料
  12. 计算机硬盘问题要求备份在弄,硬盘驱动器故障解决方案
  13. 游戏热更新:游戏客户端热更新那点事
  14. 把之前写的一个小东西代码分享出来
  15. java-练习题-小学算术题
  16. 在64位win10中开启64位ie浏览器的方法
  17. cesium 建筑物加载(带高度)
  18. JDK 19 / Java 19 正式GA
  19. WiFi基础学习到实战(一:802.11介绍)
  20. 22春天津大学《钢结构设计原理》在线作业2

热门文章

  1. Android 不申请权限储存、删除相册图片
  2. 智能控制理论基础之专家控制系统!
  3. 《找你妹》被控告!来看手游发行商掳掠之道与研发商的防狼秘笈
  4. fiddler网络限速技巧
  5. jpi多表联查_收藏!中国及世界主要海运贸易港口代码表(上篇)
  6. 华为鸿蒙支持手柄,华为智慧屏S系列正式发布 率先搭载最新版鸿蒙OS
  7. shell脚本for循环从1加到100
  8. 国人近视手术白皮书重磅发布,过去两年近视手术量增长近75%
  9. 常见问题解决[0002] 忘记管理密码找回密码
  10. python实现微信每日一句自动发送给喜欢的人