博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6设计模式之模版方法模式
阅读量:5237 次
发布时间:2019-06-14

本文共 1537 字,大约阅读时间需要 5 分钟。

这是一个常用的模式,也是一个容易理解的模式,我从这里面认识了什么叫钩子方法。 模版方法模式,很简单就是就是父类中对算法进行封装,子类中添加子集的方法做不同实现,并且父类中可以设置钩子函数,子类通过调用钩子函数控制父类的算法流程。注意这里还有一个原则,避免对象之间过度依赖。会造成项目混乱,要遵循最少知识原则。代码如下: const fs = require(‘fs’);

function readSyncByfs(tips) { tips = tips || '> '; process.stdout.write(tips); process.stdin.pause(); const buf = Buffer.allocUnsafe(10000); var response = fs.readSync(process.stdin.fd, buf, 0, 10000, 0); process.stdin.end(); return buf.toString(‘utf8’, 0, response).trim(); } class Drinks { constructor(name){ this.condiment = name; }

addwater(){ console.log(“add water!”); }

static brew(){ throw “you should make this one clearly.”; }

pourInCup(){ console.log(“pour in cup!”); }

static addCondiments(){ throw “diffents drinks with diffents condiments”; }

condimentsHook(){ // TODO: Log the answer in a database var args = readSyncByfs(do you want to put ${this.condiment} in drinks.); if(args == “yes”) { this.addCondiments(); }else{ console.log(“have done nothing!”); } }

makeDrinks(){ this.addwater(); this.brew(); this.pourInCup(); this.condimentsHook() }

} // 注意静态方法必须有子类实现

class Tea extends Drinks{ constructor(){ super(‘lemon’); }

brew(){ console.log(“Boil the water.”); }

addCondiments(){ console.log(“Add lemon”); } }

class Coffe extends Drinks{ constructor(){ super(‘sugar and milk’); }

brew(){ console.log(“Brewing in boiling water.”); }

addCondiments(){ console.log(“Add sugar and milk”); } }

let myTea = new Tea(); myTea.makeDrinks(); let myCoffe = new Coffe(); myCoffe.makeDrinks();

转载于:https://www.cnblogs.com/node-jili/p/10161507.html

你可能感兴趣的文章
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
discuz 常用脚本格式化数据
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
SQL查询总结 - wanglei
查看>>
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>