设计原则

115 阅读2分钟

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)也称最少知识原则

一个软件实体应当尽可能少地与其他实体发生相互作用(通过引入一个合理的第三者降低现有对象之间的耦合度)