设计模式之适配器模式

171 阅读1分钟

适配器模式 中间处理成合适的

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

class Adaptor {
    constructor() {
        this.power = new Power();
    }
    charge() {
        let v = this.power.charge();
        return `${v}=>12v`
    }
}

class Client {
    constructor() {
        this.adaptor = new Adaptor()
    }
    use() {
        console.log(this.adaptor.charge())
    }
}

let c1 = new Client()
c1.use()

实例 ajax

function ajax(options) {
    let defaultOptions = {
        method: 'GET',
        dataType: 'json',
    }
    for (let attr in options) {
        defaultOptions[attr] = options[attr] || defaultOptions[attr];
    }
    console.log(defaultOptions);
}
function transform(str) {
    return JSON.parse(str)
}

ajax({
    url: 'http://baidu.com',
    method: 'POST',
    success(str) {
        let result = transform(str);
        console.log(result)
        return result;
    }
})

实例 串行连续读取三个文件的内容

let fs = require('fs');
function promisify(readFile) {
    return function (...args) {
        return new Promise((res, rej) => {
            fs.readFile(...args, function (err, data) {
                if (err) {
                    rej(err)
                } else {
                    res(data)
                }
            })
        })
    }
}

(async function get() {
    let readFile = promisify(fs.readFile);
    let f1 = await readFile('1.js', 'utf8');
    let f2 = await readFile('2.js', 'utf8');
})()

实例 JQ ajax换fetch

// let $ = require('jquery');
window.$ = {
    ajax(options) {
        return fetch(options.url, {
            method: options.method || 'GET',
            body: JSON.stringify(options.data) || {}
        }).then(response => response.json());
    }
}

$.ajax({
    url,
    typy: 'POST',
    dataType: 'json',
    data: { id: 1 },
}).then((data) => {
    console.log(data);
})