javascript大话设计模式(一)---简单工厂模式
2020-01-04 本文已影响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();
})
});
});
简单工厂的模式其实也就是在写程序中不要只是写出正确答案,而是要使用封装,继承,多态的面向对象的特征,对代码进行改造。写出高复用,业务和界面分离的低耦合的代码。