为了账号安全,请及时绑定邮箱和手机立即绑定

go语言接口适配,适配器模式

标签:
Go


直接上代码:

package main                                                                   

                                                                               

import "log"                                                                   

                                                                               

type LogIN interface {                                                         

    WARN(string)                                                               

    INFO(string)                                                               

    //其他省略                                                                 

}                                                                              

                                                                               

/*                                                                             

假设你写了一个框架,框架里需要打日志,具体是个什么样的日志由使用者决定          

*/                                                                             

type Frame struct {                                                            

    name string                                                                

    log  LogIN                                                                 

}                                                                              

                                                                               

func (f *Frame) Start() {                                                      

    f.log.INFO("frame start...")                                               

}                                                                              

                                                                               

//但是问题来了,使用者用了一个这样的日志库                                     

                                                                               

type RealLog struct {                                                          

}                                                                              

                                                                               

func (l *RealLog) warn(s string) {                                             

    log.Print(s)                                                               

}                                                                              

                                                                               

func (l *RealLog) info(s string) {                                             

    log.Print(s)                                                               

}                                                                              

                                                                               

//可以看到,真正使用的日志与框架定义的日志接口不一样,如此我们就需要适配       

                                                                               

type AdaptLog struct {                                                         

    rellog *RealLog                                                            

}                                                                              

                                                          

func (alog *AdaptLog) WARN(s string) {                                         

    alog.rellog.warn(s)                                                        

}

func (alog *AdaptLog) INFO(s string) {

    alog.rellog.info(s)

}

//有了这个适配器,我们就可以很好的在框架里使用RealLog了

func main() {

    adaptlog := AdaptLog{&RealLog{}}

    frame := Frame{name: "frame", log: &adaptlog}

    frame.Start()

}

©著作权归作者所有:来自51CTO博客作者fangnux的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消