【程序设计】6大设计原则之依赖倒置
2023-02-18 16:41:30 时间
依赖倒置原则(Dependence Inversion Principle,DIP):
- 代码设计要依赖于抽象接口,不要依赖于具体实现。
- 通过面向抽象的编程方式来降低类之间的耦合,便于扩展。
反例示例:
class LuckyDrawController {
prizeRandom(users: User[], count: number): User[] {
...
}
prizeWeight(users: User[], count: number): User[] {
...
}
}
UML类图:
代码实现:
```typescript
class User {
name: string; // 用户名
level: number; // 会员等级
active: number; // 活跃值
constructor(name: string, level: number, active: number) {
this.name = name;
this.level = level;
this.active = active;
}
}
抽奖接口:传入所有参加抽奖的用户,返回得奖的用户
interface ILuckyDraw {
prize(users: User[], count: number): User[];
}
全随机抽奖类
class RandomLuckyDraw implements ILuckyDraw {
prize(users: User[], count: number): User[] {
// 洗牌
const shuffleUsers = _.shuffle(users);
// 随机抽取三位用户
return _.sampleSize(shuffleUsers, count);
}
}
按权重抽象
class WeightLuckyDraw implements ILuckyDraw {
prize(users: User[], count: number): User[] {
// 排序
const sortUsers = _.orderBy(users, ["level", "active"], ["desc", "desc"]);
// 抽取前三位
return _.take(sortUsers, count);
}
}
运行示例:
import { RandomLuckyDraw, WeightLuckyDraw, User } from "./DIP";
// 生成随机用户
let users = [];
for (let i = 0; i < 10; i++) {
const user = new User(
Mock.Random.cname(),
Mock.Random.integer(0, 10),
Mock.Random.integer(50, 100)
);
users.push(user);
}
// 随机抽奖
const randomLuckyDraw = new RandomLuckyDraw();
const winners1 = randomLuckyDraw.prize(users, 3);
console.log(winners1);
// 权重抽奖
const weightLuckyDraw = new WeightLuckyDraw();
const winners2 = weightLuckyDraw.prize(users, 3);
console.log(winners2);
【在线代码】:依赖倒置原则演示
相关文章
- ZebraBI 6.0 发布,更高更快更强大
- DAX 引擎之父揭秘 DAX 引擎内部细节
- 脑图PPT - 让大脑高效流淌内容
- 融合最佳展现创意的企业智慧经营分析看板
- ArcPy将HDF格式栅格文件批量转为TIFF格式
- 用AvaSpec 2048便携式光谱仪测定地物高光谱曲线
- ArcPy依据成像时间分别批量拼接不同时相的遥感影像
- ArcMap实现栅格遥感影像监督分类
- ENVI实现基于像元的遥感影像镶嵌拼接
- ENVI中不含地理参考信息的栅格图像添加地理或投影坐标系
- ENVI无缝镶嵌Seamless Mosaic工具实现栅格图像的镶嵌拼接
- ArcMap获取点要素在栅格图像中所处的行号与列号
- 哨兵2号Sentinel-2大气校正后的L2A级遥感影像下载方法
- Visio绘制时间轴、日程进度图的方法
- 基于51单片机智能温控风扇设计
- 仿真设计|基于51单片机的简易抢答器
- Excel: 通过Indirect函数和Address函数引用单元格数据
- 【Dubug】bitField 引发的栈溢出排错记
- 【RPC】RPC实战与核心原理
- 给开源项目提了个PR