适配器模式

2019-11-19 17:53:39 浏览数 (1)

这是书中最后一种设计模式。

mac book pro委实是一个很好的开发和装逼工具。但很多时候比如投屏,插移动硬盘你都得借助适配器来转接。你不用考虑拆开你的macbook,只要转接器就够了。

程序开发时经常也遇到这样的场景:当我们试图调用某个实体的接口时并不符合我们想要的规范,动别人的代码是不人道的,第二种就是写一个转接器。

比如这是我写基于koa开发一个类似egg的架构时:错误捕捉的中间件:

在前端,通常也会对请求对象做一定封装,比如返回根据errorCode调用弹框:

代码语言:javascript复制
import axios from 'axios';
import {stringify} from 'qs';
import {BASE_URL} from '../constant';
import {Notice} from 'iview';

class Request {
    get(url, option) {
        return new Promise((resolve, reject) => {
            axios.get(`${BASE_URL}${url}?${stringify(option)}`).then(res => {
                resolve(res.data);
            }, err => {
                reject(err);
            });
        });
    }

    post(url, option = {}, userConfig={}) {
        const {config={}, tost = false} = userConfig ;
        return new Promise((resolve, reject) => {
            axios.post(BASE_URL   url, option, {
                ...config,
                timeout:1000000//超时
            }).then(res => {
                const {data : {resultCode, resultMsg}} = res;
                if (! resultCode) {
                    Notice.error({
                        title : '提示',
                        desc : resultMsg
                    });
                }
                if (tost && resultCode) {
                    Notice.success({
                        title: '提示',
                        desc: resultMsg
                    });
                }
                resolve(res.data);
            }, err => {
                reject(err);
            });
        });
    }
}

export default Request;

适配器模式是一对相对简单的模式。

在系列文章提到的设计模式中,有一些模式跟适配器模式的结构非常相似,比如装饰者模式、代理模式。这几种模式都属于“包装模式”,都是由一个对象来包装另一个对象。区别它们的关键仍然是模式的意图。适配器模式主要用来解决两个已有接口之间不匹配的问题,它不考虑这些接口是怎样实现的,也不考虑它们将来可能会如何演化。适配器模式不需要改变已有的接口,就能够使它们协同作用。装饰者模式和代理模式也不会改变原有对象的接口,但装饰者模式的作用是为了给对象增加功能。

0 人点赞