zoukankan      html  css  js  c++  java
  • 设计模式尝试(组合模式、单例模式、模板方法模式)---js实现

      设计模式一直想要学习整理一下,但是一直没有时间。最近工作不算是特别忙,现在终于可以尝试一下了。感觉收获很多,在此记录一下。免得以后忘记

      

      组合模式:对于组合模式来说,给我个人的感觉就是拼接组合命令,之后通过执行根方法来进行所有的执行,感觉和面向对象的编程思想有点类似?只不过没有面向对象那么复杂。更多的是类似将所有想做的事情拼接成一棵树,我们只需要操控最根本的那个节点就可以触发整棵树的所有命令。

    class combination {
        constructor() {
            this.list = []; // 所有子节点的存储数组
        }
        add(item) {
            this.list.push(item);    // 向其中添加新的子节点
        }
        emit() {
            for(let i=0; i < this.list.length; i++) {
                this.list[i].emit();   // 通过循环触发所有的子节点
            }
        }
    }
    
    const combination1 = new combination(); // 行为组合1
    combination1.add({
        emit: () => console.log('分组1的任务1')
    })
    combination1.add({
        emit: () => console.log('分组1的任务2')
    })
    
    const combination2 = new combination();  // 行为组合2
    combination2.add({
        emit: () => console.log('分组2的任务1')
    })
    
    const combination3 = new combination();  // 行为组合3
    combination3.add({
        emit: () => console.log('分组3的任务1')
    })
    combination3.add({
        emit: () => console.log('分组3的任务2')
    })
    combination3.add({
        emit: () => console.log('分组3的任务3')
    })
    
    const combinationAll = new combination();  // 根节点
    combinationAll.add(combination1);
    combinationAll.add(combination2);
    combinationAll.add(combination3);
    
    combinationAll.emit();

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      

      单例模式: 相当经典的一个设计模式,生成一个对象。保持它本身的单一性。后续new的对象都和第一个对象保持一致,挺有意思的一个模式。

    class singleCase {
        constructor(data) {
            this.a = data;
            this.singleItem = null; // 记录该对象是否被创建
        }
    
        static getSingleItem(data) { // 通过方法获取对象
            if(!this.singleItem) this.singleItem = new singleCase(data);
            return this.singleItem;
        }
    }
    
    const single1 = singleCase.getSingleItem('111');
    const single2 = singleCase.getSingleItem('222');
    
    console.log(single1);
    console.log(single2);

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      模板方法模式:本质上就是继承,基于继承重写了父类的方法。和工厂模式联动比较多。其实在我眼里这俩耦合度有点高。想要区分可能有点难呀,或者没必要区分。一起记算了。

      

    class temModel { // 基础模板
        constructor() {}
    
        init() {
            this.firstStep();
            this.secondStep();
            this.thirdStep();
            this.fourthStep();
        }
    
        firstStep() {
            console.log('模板方法第1111步');
        }
        secondStep() {}
        thirdStep() {
            console.log('模板方法第3333步');
        }
        fourthStep() {}
    }
    class test1Model extends temModel{ // test1模板类型
        constructor() {
            super();
        }
        secondStep() {
            console.log('test1 的第2222步');
        }
        fourthStep() {
            console.log('test1 的第4444步');
        }
    }
    class test2Model extends temModel{ // test2模板类型
        constructor() {
            super();
        }
        secondStep() {
            console.log('test2 的第2222步');
        }
        fourthStep() {
            console.log('test2 的第4444步');
        }
    }
    
    const test1 = new test1Model();
    const test2 = new test2Model();
    test1.init();
    test2.init();

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      

  • 相关阅读:
    单一职责原则
    算法的设计与分析 -----图 (1)
    交换机
    子网掩码
    IP地址分类+网络号
    网络参考模型与5G协议
    什么是5G
    RxJAVA
    EventBus3.0的学习
    ButterKnife+Zelezny插件
  • 原文地址:https://www.cnblogs.com/acefeng/p/12015241.html
Copyright © 2011-2022 走看看