javascript大话设计模式(一)---简单工厂模式

工作中我们常常因为代码耦合度高,最后代码变得异常难维护,付出的成本也是非常惊人的,所以如何降低耦合度,就引出了我们今天的主角,面向对象。
面向对象有三大特征,封装,继承,多态,很多人不知道这些功能是如何减低耦合度的,我们一点一点来讲解

请写一个计算器程序


javascript大话设计模式(一)---简单工厂模式_第1张图片
image.png

对,就这种计算机,实现简单的加减乘除运算

上代码

// 引入readline模块
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question('请输入第一个数字 : ', (answer1) => {
    rl.question('请输入第二个数字  : ', (answer2) => {
        rl.question('请输入运算符:',(operate)=>{
            let result='';
            answer2=Number(answer2);
            answer1=Number(answer1);
            switch (operate) {
                case '+':
                    result=answer2+answer1;
                    break;
                case '-':
                    result=answer2-answer1;
                    break;
                case '*':
                    result=answer2*answer1;
                    break;
                case '/':
                    result=answer2/answer1;
                    break;
                default:
                    break;
            }
            console.log(`最后结果为 ${result}`);
            rl.close();
        })
    });
});

致命的是,这就是一个高耦合的代码,代码维护差,改动起来也麻烦,不标准

要想写好代码,首先要业务和界面分离,划重点
接下来上代码

首先创建一个operate类,这是业务层
class Operate {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }

    caculate(operate) {
        switch (operate) {
            case '+':
                return this.x + this.y;
            case '-':
                return this.x - this.y;
            case '*':
                return this.x * this.y;
            case '/':
                return this.x / this.y;
            default:
                break;
        }
    }
}

module.exports = Operate;
界面层
const Operate=require('./Operate');

// 引入readline模块
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});



rl.question('请输入第一个数字 : ', (answer1) => {
    rl.question('请输入第二个数字  : ', (answer2) => {
        rl.question('请输入运算符:', (operate) => {
            let result = '';
            answer2 = Number(answer2);
            answer1 = Number(answer1);
            const cacu = new Operate(answer2, answer1);
            result = cacu.caculate(operate);
            console.log(`最后结果为 ${result}`);
            rl.close();
        })
    });
});

简单工厂的模式其实也就是在写程序中不要只是写出正确答案,而是要使用封装,继承,多态的面向对象的特征,对代码进行改造。写出高复用,业务和界面分离的低耦合的代码。

你可能感兴趣的:(javascript大话设计模式(一)---简单工厂模式)