美文网首页
设计模式-适配器模式

设计模式-适配器模式

作者: 小麻烦爱学习 | 来源:发表于2021-01-24 21:47 被阅读0次

适配器模式: 适配器可以理解为两个不兼容的接口的桥梁,结合了两个独立接口的功能.
比如我们的手机充电器就是一个适配器.

image.png

代码如下:

class Power {
    charge() {
        return '220v';
    }
}

class Adaptor {
    power: Power;
    constructor() {
        this.power = new Power();;
    }
    change() {
        return `${this.power.charge()} turn to 5v`;
    }
}

class Phone {
    adaptor: Adaptor;
    constructor() {
        this.adaptor = new Adaptor();
    }
    chargeForPhone() {
        return this.adaptor.change();
    }
}

const phone = new Phone();
let res = phone.chargeForPhone();
console.log(res); // 220v turn to 5v

参数的适配/返回结果的适配

function ajax(options) {
    let defaultOptions = {
        method: 'GET',
        dataType: 'json'
    }
    // 参数的适配
    for(let attr in options) {
        defaultOptions[attr] = options[attr] || defaultOptions[attr];
    }

    console.log(defaultOptions);
}

ajax({
    method: 'get',
    url: '',
    success(str) {
        // 返回结果的适配
        // 服务器返回的是字符串,期望的数据是json,增加一个function,把数据转换成json
        const adaptor = (str) => {
            JSON.parse(str);
        }
        return adaptor(str);
    }
});

方法的适配

假如要串行读取3个文件:1.txt 2.txt 3.txt

// 以下是不推荐的写法
const fs = require('fs');
fs.readFile('1.txt','utf-8', (err, data) => {
    if(data) {
        console.log(data);
        fs.readFile('2.txt','utf-8', (err, data) => {
            if(data) {
                console.log(data);
                fs.readFile('3.txt','utf-8', (err, data) => {
                    if(data) {
                        console.log(data);
                    }
                });
            }
        });
    }
});

// 地狱回调的优雅方法是使用Promise,那么对fs.readFile进行适配

function promisefy(readFile) {
    // 把原始的readFile包装成一个新的函数,新的函数返回Promise对象
    return function(...args) {
        return new Promise((resolve, reject) => {
            readFile(...args, (err, data) => {
                if(err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            });
        });
    }
}
// 对fs.readFile进行适配
let newReadFile = promisefy(fs.readFile);
let file1 = await newReadFile('1.txt', 'utf8');
let file2 = await newReadFile('2.txt', 'utf8');
let file3 = await newReadFile('3.txt', 'utf8');

接口的适配

假如要把项目中的所有的$.ajax改成fetch,我们不可能把每一处都替换成fetch

$.ajax({url,type:'POST',dataType: 'json', data: {}}).then(() => {})

只要把$.ajax适配一下即可

window.$ = {
    ajax(options) {
        return fetch(options.url, {
            method: option.type || 'GET',
            body: JSON.stringify(options.data || []);
        }).then(() => {});
    }
}

相关文章

  • 简说设计模式之适配器模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是适配器模式 适配器模式(Adapter...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 最常用的设计模式---适配器模式(C++实现)

    适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。 适配器设计模式也并不复杂,适...

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(6)模板模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(7)建造者模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(4)抽象工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(1)简单工厂模式

    设计模式系列文章 《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象工厂...

  • iOS设计模式(2)工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象...

  • iOS设计模式(8)外观模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

网友评论

      本文标题:设计模式-适配器模式

      本文链接:https://www.haomeiwen.com/subject/ssjvzktx.html