设计模式在 TypeScript 中的应用
来源:互联网 发布:网络运营主管招聘 编辑:程序博客网 时间:2024/06/04 22:13
定义
定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
实现
思路:创建表示各种策略的对象,和一个行为随着策略对象改变而改变的 context 对象。
一个简单的加减乘例子:
interface Compute { computeF (num1: number, num2: number): number}// 创建策略对象class ComputeAdd implements Compute { public computeF ( num1: number, num2: number ): number { return num1 + num2 }}class ComputeSub implements Compute { public computeF ( num1: number, num2: number ): number { return num1 - num2 }}class ComputeMul implements Compute { public computeF ( num1: number, num2: number ): number { return num1 * num2 }}// 创建行为类class Context { public compute: Compute public constructor (compute: Compute) { this.compute = compute } public excuteCompute ( num1: number, num2: number ): number { return this.compute.computeF(num1, num2) }}let context1 = new Context(new ComputeAdd()) .excuteCompute(1, 2)let context2 = new Context(new ComputeSub()) .excuteCompute(1, 2)let content3 = new Context(new ComputeMul()) .excuteCompute(1, 2)console.log(context1, context2, content3) // 3, -1, 2
复杂一点的例子(打怪):
// 武器接口interface Weapon { useWeapon (): void}// 技能接口interface Skill { useSkill (): void}// 武器类class Gun implements Weapon { public useWeapon () { console.log( 'Weapon: Gun') }}class Stick implements Weapon { public useWeapon () { console.log('Weapon: Stick') }}// 技能类class Magic implements Skill { public useSkill () { console.log('Skill: Magic') }}class Kongfu implements Skill { public useSkill () { console.log('Skill: Chinese Kongfu') }}// 抽象类,用于给其他类继承abstract class Way { // 武器 public weapon: Weapon // 技能 public skill: Skill // 设置武器 public setWeapon (weapon: Weapon): void { this.weapon = weapon } // 设置技能 public setSkill (skill: Skill): void { this.skill = skill } public getWeaponAndSkill (): void { this.weapon.useWeapon() this.skill.useSkill() } // 抽象方法 public abstract saySome (): void}class SimpleWay extends Way { public constructor () { super() this.weapon = new Gun() this.skill = new Magic() } public saySome () { console.log('屠龙宝刀,点击就送') }}const way = new SimpleWay()way.saySome()console.log('=======')way.getWeaponAndSkill()console.log('=======')way.setWeapon(new Stick)way.setSkill(new Kongfu)way.getWeaponAndSkill()
阅读全文
0 0
- 设计模式在 TypeScript 中的应用
- 设计模式在 TypeScript 中的应用
- 设计模式在 TypeScript 中的应用
- 设计模式在 TypeScript 中的应用
- 设计模式在EJB中的应用
- 设计模式在鼠标绘图中的应用
- 设计模式在项目中的应用
- 设计模式在实际项目中的应用
- 设计模式在EJB中的应用
- 设计模式在EJB中的应用
- 设计模式在EJB中的应用
- builder模式在游戏设计中的应用
- 设计模式在GIS开发中的应用
- 设计模式在EJB中的应用
- 设计模式在游戏开发中的应用
- 设计模式在EJB中的应用
- 设计模式在EJB中的应用
- 设计模式在Eclipse平台中的应用
- ListView源码解析
- leetcode 121 309
- 设计模式在 TypeScript 中的应用
- redis之如何配置jedisPool参数
- C++笔记——io流条件状态
- 设计模式在 TypeScript 中的应用
- python实现某网站的音乐下载
- PAT乙级 1077. 互评成绩计算 (20)
- SpringMVC框架学习笔记
- StrokesPlus键盘按键表示
- eclipse中JPA的使用
- 直播+连麦+推流问题集锦001
- 凸优化以及机器学习资料
- hdoj 1124 Factorial (第一次接触数论)