SOLID S(单一职责原则) O(开放封闭原则) L(里氏置换原则) I(接口隔离原则) D(依赖倒置原则) TODO (迪米特法则)
单一职责原则
- 一个类的功能,要尽可能单一不要太杂
- 如果一个类的代码行数超过100 或者方法超过10个就要拆分了
export {}
// 也不能拆的过细 拆的过细就可能降低内聚性
class Product{
public name:string
public price:number
public category:Category
public updateName(){
}
public updatePrice(){
}
public updateCategory(){
}
}
class Category{
public name:string
public icon:string
}
开放封闭原则
- 对修改封闭 对拓展开放
class Customer{
constructor(public rank:string,public discount:number=1){
}
}
class Product{
constructor(public name:string,public price:number){
}
// 不同顾客哟普不一样的折扣
cost(customer:Customer){
return this.price*customer.discount
}
}
let product=new Product('笔记本电脑',1000)
let member=new Customer('member',.8)
let vip=new Customer('vip',.6)
let guest=new Customer('guest')
console.log(product.cost(member));
里氏置换原则
- 里氏置换 可以替换 任何可以传父类的地方都可以把子类传进去
- 里氏置换是一个原则要求子类不能违反父类的功能和规定
// 尽可能使用父类或者抽象类
// 任何在能使用父类的地方都可以使用子类 多态有关
abstract class Drink{
abstract getPrice():number
}
class cocaCola extends Drink{
getPrice(): number {
return 3
}
}
class Fanta extends Drink{
getPrice(): number {
return 4
}
}
class Customer1{
drink(abstractDink: Drink){
console.log('花费'+abstractDink.getPrice())
}
}
// 里氏置换 可以替换 任何可以传父类的地方都可以把子类传进去
// 里氏置换是一个原则要求子类不能违反父类的功能和规定
let c1=new Customer1()
c1.drink(new Fanta())
接口隔离原则
一个类对另一个类的依赖应该建立在最小的接口上。(最小化, 适度减少依赖从而降低变更的风险。)
依赖倒置原则
// 依赖倒置原则:依赖抽象而不依赖具体的实现
interface GirlFriend {
age:number;
height:number;
cook():void
}
class LinZhiLing implements GirlFriend{
age:number=35
height: number=178;
cook(): void {
console.log('泡面');
}
}
class HanMeimei implements GirlFriend{
age:number=35
height: number=178;
cook(): void {
throw new Error("泡面");
}
}
class SingleDog{
constructor(public girlFriend:GirlFriend){
}
}
const dog1=new SingleDog(new LinZhiLing())
const dog2=new SingleDog(new HanMeimei())
迪米特原则(Law of Demeter)也称最少知识原则
一个软件实体应当尽可能少地与其他实体发生相互作用(通过引入一个合理的第三者降低现有对象之间的耦合度)