美文网首页
javascript大话设计模式(一)---简单工厂模式

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

作者: 悦者生存 | 来源:发表于2020-01-04 16:59 被阅读0次

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

    请写一个计算器程序


    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大话设计模式(一)---简单工厂模式

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