• 常用设计模式总结 + 实例


    工厂模式   

    工厂函数通常是指一个函数,它用来创建和返回其他函数或对象的实例。

    人话: 当new Class 或 Function 时,根据传入的参数,而返回不同的值,这就是工厂模式。 (所以可以说,这是我们开发中,无意中用了最多的模式)

    1. // 工厂模式示例:创建不同类型的图表组件
    2. // 创建柱状图组件
    3. class BarChart {
    4. // ...
    5. }
    6. // 创建折线图组件
    7. class LineChart {
    8. // ...
    9. }
    10. // 图表工厂类
    11. class ChartFactory {
    12. createChart(type) {
    13. switch (type) {
    14. case 'bar':
    15. return new BarChart();
    16. case 'line':
    17. return new LineChart();
    18. // 可以添加更多的图表类型...
    19. default:
    20. throw new Error('Unsupported chart type');
    21. }
    22. }
    23. }
    24. const chartFactory = new ChartFactory();
    25. const barChart = chartFactory.createChart('bar');
    26. const lineChart = chartFactory.createChart('line');

    单例模式

    1. // 单例模式示例:全局应用配置
    2. class AppConfig {
    3. constructor() {
    4. this.config = {
    5. apiEndpoint: 'https://api.example.com',
    6. apiKey: 'your-api-key',
    7. // 其他配置项...
    8. };
    9. }
    10. getConfig() {
    11. return this.config;
    12. }
    13. }
    14. const appConfig = new AppConfig();
    15. export default appConfig;
    16. --------------------------------------
    17. import appConfig from './appConfig.js';
    18. function fetchData() {
    19. const config = appConfig.getConfig();
    20. const apiEndpoint = config.apiEndpoint;
    21. const apiKey = config.apiKey;
    22. // 使用配置进行数据获取...
    23. }

    发布订阅者模式

    总结:一个发布订阅者模式,通常有三个对象, 一个是事件管理对象,一个是订阅者对象,一个是发布者对象。

    订阅者会调用事件管理对象的订阅方法,传递一个回调函数。

    发布者会调用事件管理对象的发布方法,触发这个回调函数,并给回调函数传递实参value。

    1. // 创建一个事件管理器对象
    2. class EventEmitter {
    3. constructor() {
    4. this.events = {};
    5. }
    6. // 订阅事件
    7. subscribe(event, listener) {
    8. if (!this.events[event]) {
    9. this.events[event] = [];
    10. }
    11. this.events[event].push(listener);
    12. }
    13. // 发布事件
    14. emit(event, data) {
    15. const listeners = this.events[event];
    16. if (listeners) {
    17. listeners.forEach(listener => {
    18. listener(data);
    19. });
    20. }
    21. }
    22. // 取消订阅事件
    23. unsubscribe(event, listener) {
    24. const listeners = this.events[event];
    25. if (listeners) {
    26. this.events[event] = listeners.filter(l => l !== listener);
    27. }
    28. }
    29. }
    30. // 创建一个事件管理器实例
    31. const eventManager = new EventEmitter();
    32. ----------------------------------------------
    33. // 订阅事件 这一块通常会单独在一个对象里调用
    34. function handleEvent1(data) {
    35. console.log(`Event 1 handled with data: ${data}`);
    36. }
    37. function handleEvent2(data) {
    38. console.log(`Event 2 handled with data: ${data}`);
    39. }
    40. eventManager.subscribe('event1', handleEvent1);
    41. eventManager.subscribe('event2', handleEvent2);
    42. ---------------------------------------------------
    43. --------------------------------------------------
    44. // 发布事件 这一块通常会单独在一个对象里调用
    45. eventManager.emit('event1', 'Some data for event 1');
    46. eventManager.emit('event2', 'Data for event 2');
    47. // 取消订阅事件
    48. eventManager.unsubscribe('event1', handleEvent1);
    49. // 再次发布事件,但事件1不会再触发
    50. eventManager.emit('event1', 'Another data for event 1');
    51. -------------------------------------------------------

  • 相关阅读:
    数字化外协生产综合管理系统,实现信息自动同步,数据自动统计分析!
    5.最长回文子串(马拉车怨种版)
    包管理工具之npm也慌了?
    【机器学习】机器学习的重要方法——线性回归算法深度探索与未来展望
    Stream流reduce方法
    项目笔记记录
    一个界面现代美观,色彩年轻化的Vue3+SpringBoot3前后端分离中后台管理脚手架
    数据库系统原理与应用教程(078)—— MySQL 练习题:操作题 173-180(二十二):综合练习
    告警:线上慎用 BigDecimal ,坑的差点被开了
    jmeter 压测数据库
  • 原文地址:https://blog.csdn.net/weixin_43416349/article/details/132928660