Skip to content

组件封装是为了代码更加整洁,有更好的可阅读性和可拓展性;

常见的设计模式:

工厂模式

你只关注你要什么,然后从工厂里面获取你要的东西就行;

ts
// 工厂函数
function createUser(type) {
  const roles = {
    admin: { permissions: ["delete", "manage"] },
    user: { permissions: ["read"] }
  };
  return { type, ...roles[type] };
}

// 直接获得对象,无需 new 或复杂逻辑
const admin = createUser("admin");

策略模式

把不同的算法/规则封装成独立的“策略”,使用时动态切换,避免写一堆 if-else。

ts
// 1. 定义策略对象
const discountStrategies = {
  vip: (price) => price * 0.7,
  normal: (price) => price * 0.9,
  newcomer: (price) => price * 0.8
};

// 2. 使用时动态选择策略
function calculatePrice(strategyType, price) {
  return discountStrategies[strategyType](price);
}

代理模式

一个比较熟悉的场景就是qiankun里面对Window对象的处理,相当于创建了一个沙盒,需要什么window的属性,都从真实的window里面获取;直接修改window,修改的是假的window;

它是使用Proxy进行劫持的;

ts
// 例1:表单验证代理
const formValidator = new Proxy(formData, {
  set(target, key, value) {
    if (key === 'age' && value < 0) {
      throw new Error("年龄不能为负数");
    }
    target[key] = value;
    return true;
  }
});

// 例2:API调用日志
const loggedApi = new Proxy(api, {
  get(target, propKey) {
    const method = target[propKey];
    return (...args) => {
      console.log(`调用方法:${propKey},参数:${args}`);
      return method.apply(target, args);
    };
  }
});

观察者模式 - 订阅发布者模式

区别在于,订阅发布者模式中,订阅者和发布者之间有一个中心化的“处理器”; 而观察者和被观察者之间是直接连接的;

单例模式

面向对象中,只起一个实例:

比如,prisma中使用的单例, 数据库连接器;

本站访客数 人次 本站总访问量