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

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


依赖倒置原则(Dependence Inversion Principle,DIP):


  1. 代码设计要依赖于抽象接口,不要依赖于具体实现。
  2. 通过面向抽象的编程方式来降低类之间的耦合,便于扩展。


反例示例:


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


UML类图:


1.png

代码实现:


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);



相关文章
|
人工智能 Java Python
七大设计原则之依赖倒置原则应用
七大设计原则之依赖倒置原则应用
61 0
|
设计模式 Java 关系型数据库
Java设计模式中的设计原则 2
Java设计模式中的设计原则
119 0
|
8月前
|
设计模式 存储 NoSQL
【设计模式】软件设计原则-单一职责原则
【1月更文挑战第12天】【设计模式】软件设计原则-单一职责原则
|
设计模式 关系型数据库
软件架构设计原则之迪米特法则
迪米特原则(Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合度。迪米特原则主要强调:只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以称为成员朋友类,而出现在方法体内部的类不属于朋友类。
111 1
|
设计模式 安全 Java
设计原则之依赖倒置原则
设计原则之依赖倒置原则
84 0
设计原则之依赖倒置原则
|
存储 设计模式 安全
【Java设计模式 面向对象设计思想】七 面向对象分析、面向对象设计和面向对象编程
【Java设计模式 面向对象设计思想】七 面向对象分析、面向对象设计和面向对象编程
208 0
|
设计模式 Java 关系型数据库
面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
134 1
面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
|
XML JavaScript 前端开发
软件设计——依赖倒置
软件设计——依赖倒置
252 0
软件设计——依赖倒置
【程序设计】6大设计原则之单一职责
【程序设计】6大设计原则之单一职责
119 0
【程序设计】6大设计原则之单一职责
|
设计模式
【设计模式】软件设计七大原则 ( 开闭原则 )
【设计模式】软件设计七大原则 ( 开闭原则 )
199 0
【设计模式】软件设计七大原则 ( 开闭原则 )