前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【程序设计】6大设计原则之依赖倒置

【程序设计】6大设计原则之依赖倒置

作者头像
前端小鑫同学
发布2022-12-26 08:49:55
1900
发布2022-12-26 08:49:55
举报
文章被收录于专栏:小鑫同学编程历险记
依赖倒置原则(Dependence Inversion Principle,DIP):

  1. 代码设计要依赖于抽象接口,不要依赖于具体实现。
  2. 通过面向抽象的编程方式来降低类之间的耦合,便于扩展。
反例示例:
代码语言:javascript
复制
class LuckyDrawController {
  prizeRandom(users: User[], count: number): User[] {
    ...
  }

  prizeWeight(users: User[], count: number): User[] {
    ...
  }
}

UML类图:

代码实现:

代码语言:javascript
复制
```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;
  }
}
抽奖接口:传入所有参加抽奖的用户,返回得奖的用户
代码语言:javascript
复制
interface ILuckyDraw {
  prize(users: User[], count: number): User[];
}
全随机抽奖类
代码语言:javascript
复制
class RandomLuckyDraw implements ILuckyDraw {
  prize(users: User[], count: number): User[] {
    // 洗牌
    const shuffleUsers = _.shuffle(users);
    // 随机抽取三位用户
    return _.sampleSize(shuffleUsers, count);
  }
}
按权重抽象
代码语言:javascript
复制
class WeightLuckyDraw implements ILuckyDraw {
  prize(users: User[], count: number): User[] {
    // 排序
    const sortUsers = _.orderBy(users, ["level", "active"], ["desc", "desc"]);
    // 抽取前三位
    return _.take(sortUsers, count);
  }
}
运行示例:
代码语言:javascript
复制
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);

【在线代码】:依赖倒置原则演示

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 依赖倒置原则(Dependence Inversion Principle,DIP):
  • 反例示例:
    • 抽奖接口:传入所有参加抽奖的用户,返回得奖的用户
      • 全随机抽奖类
        • 按权重抽象
        • 运行示例:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档