设计模式ts实战系列(上)

设计模式概念

如果我们把代码编程比作是战争的话,那么设计模式就是兵法。

设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

使用设计模式是为了可重用代码,让代码更容易被他人理解、保证代码的可靠性。

设计模式原则

  • 开闭原则 对扩展开放,对修改关闭。保证程序的扩展性好,易于维护和升级

  • 单一职责原则 对一个类而言,应该仅有一个引起它变化的原因

  • 里氏代换原则 子类可以扩展父类的功能,但是不能改变父类原有的功能

  • 依赖倒置原则 抽象不依赖细节,细节应该依赖抽象。

  • 接口隔离原则 建立单一接口,代替庞大臃肿的接口。

  • 最小知识原则 一个对象应该对其他对象有最少的了解。类间解耦,弱耦合。

本文主要讲的设计模式

  • 单例模式

  • 工厂模式

  • 享元模式

  • 策略模式

  • 观察者模式

  • 适配器模式

  • 装饰器模式

单例模式

特点

  1. 单例类只能有一个实例。

  2. 单例类必须自己创建自己的唯一实例。

  3. 单例类必须给所有其他对象提供这一实例。

一句话概括

保证一个类仅有一个实例,并提供一个访问它的全局访问点

优缺点

优点

  1. 减少内存开支

  2. 减少性能开销

  3. 避免对资源的多重占用

  4. 设置全局的访问点

缺点

  1. 单例很难扩展

  2. 与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

常用的单例模式有两种

  • 懒汉模式

// 懒汉式,只有在调用 getInstance 的时候才会实例化 Singleton
class Singleton {
  static instance = null;
  // 获取实例方法
  static getInstance() {
    return this.instance || (this.instance = new Singleton());
  }
}

const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();

console.log(instance1 == instance2); // true
  • 饿汉模式

// 饿汉式,在类初始化的时候就已经创建好了实例
class Singleton {
  static instance = new Singleton();
  // 获取实例方法
  static getInstance() {
    return this.instance;
  }
}

const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();

console.log(instance1 == instance2); // true

工厂模式

目的

定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行

使用场景

我们明确地计划不同条件下创建不同实例时

优缺点

优点

  1. 隐藏了对象创建的细节,将产品的实例化过程放到了工厂中实现。

  2. 客户端基本不用关心使用的是哪个产品,只需要知道用工厂的那个方法(或传入什么参数)就行了.

  3. 方便添加新的产品子类,每次只需要修改工厂类传递的类型值就行了。

  4. 遵循了依赖倒转原则。

缺点

  1. 适用于产品子类型差不多, 使用的方法名都相同的情况.

  2. 每添加一个产品子类,都必须在工厂类中添加一个判断分支(或一个方法),这违背了OCP(开闭原则)。

实现

比如我要有一个 Animal 工厂,这个工厂要生产动物。那么我要定义动物都有 Feature特征必须要有 color 颜色跟 bark 叫声。

1. 接口实现
// 定义工厂需要的动物特征
interface Feature {
  color: string;
  bark(): void;
}

// 定义动物类型名字
type name = 'cat' | 'dog'

// 子类必须要实现 Feature 接口的方法
// 这样我们就可以创建白色叫声喵喵喵的猫了
class Cat implements Feature {
  color = "白色";
  bark() {
    console.log(`${this.color} 喵喵喵`);
  }
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值