• Go!Go!Go!设计模式-适配设计模式


    零:前言

    参考:
    https://github.com/senghoo/golang-design-pattern/tree/master/02_adapter
    适配器模式用于转换一种接口适配另一种接口。
    实际使用中Adaptee一般为接口,并且使用工厂函数生成实例。
    在Adapter中匿名组合Adaptee接口,所以Adapter类也拥有SpecificRequest实例方法,又因为Go语言中非入侵式接口特征,其实Adapter也适配Adaptee接口。


    核心原理:
    创建一个适配器,用在独立模块之间独立开发的场景:
    模块1要求一个功能实现接口A,但是对应的功能模块定义的接口却是B,
    此时就需要一个适配层:
    对上,实现当前模块1的功能接口A,但并不负责实现所谓的"功能";
    对下,调用真正功能模块2的功能接口B;
    那么如何兼顾对上和对下呢?答: 实现接口A,内嵌接口B


    步骤:
    1. 上,模块开发中,制定了某个功能的接口1,对于适配器来说称为适配的目标接口
    2. 下,真正实现了某个功能的另一个模块制定接口2,对于适配器来说称为被适配的目标接口
    3. 适配器类, 实现适配的目标接口,接口内部调用被适配的目标实例的接口函数,

    一:样例

    //1. Target 是适配的目标接口
    type Target interface {
        Request() string
    }
    
    //2. Adaptee 是被适配的目标接口
    type Adaptee interface {
        SpecificRequest() string
    }
    //AdapteeImpl 是被适配的目标结构体,实现对应的接口
    type adapteeImpl struct{}
    func (*adapteeImpl) SpecificRequest() string {
        return "adaptee method"
    }
    //AdapteeFactory 是被适配接口的工厂函数,用来生成一个被是被适配的目标类实例
    func AdapteeFactory() Adaptee {
        return &adapteeImpl{}
    }
    
    
    //3. Adapter即为适配层,转换Adaptee的接口为Target要求的接口的适配器:对外实现目标接口,内部调用被适配类实例接口方法
    type adapter struct {
        Adaptee   //内嵌被适配目标接口,其隐含包括了一个同名的filed
    }
    func (a *adapter) Request() string {
        return a.SpecificRequest()   //****适配的核心: 在目标接口中调用被适配接口*****
    }
    
    //AdapterFactory 是Adapter的工厂函数: 给我一个向下的被适配类实例,我给你一个能够向上兼容的适配器
    func AdapterFactory(adaptee Adaptee) Target {
        return &adapter{
            Adaptee: adaptee, //将底层被调用类实例作为自己的一个field
        }
    }
    adaptee := AdapteeFactory()
    target := AdapterFactory(adaptee)
    res := target.Request()
    
    
     
  • 相关阅读:
    金牙与肉屑
    科学研究的动机以及雄心
    适度的自我吹嘘
    ubuntu12启用root账户
    有很多文件夹是受系统保护的
    vs2012换肤功能,vs2012主题及自定义主题
    Ubuntu navicat for mysql 安装和使用
    Asp.Net MVC4 Bundle捆绑压缩技术
    64位Windows Jmail组件报错解决方案
    C#检测上传文件的真实类型
  • 原文地址:https://www.cnblogs.com/shuiguizi/p/14266320.html
Copyright © 2020-2023  润新知