javascript桥接模式(1)-队列数据结构

根据书上例子的实际要求,涉及到js队列的问题。所以先把js中队列的具体实现数据结构贴出来。具体参考《学习javascript数据结构和算法》第四章。
队列数据结构遵循先入先出的原则。入队操作添加到数组的末尾,返回新数组。出队操作弹出数组第一个元素,返回新数组。两个操作对于数组都有结构的改变

 //js中队列的实现是依赖数组的数据结构
function Queue() {

    let items = [];  //初始化空数组,let关键字是es6中的
    //用于形成大括号包围的作用域

    this.enqueue = function(element){ //入队操作
        items.push(element); //数组push操作
    };

    this.dequeue = function(){//出对
        return items.shift(); //数组shift操作
    };

    this.front = function(){ //队列第一个元素
        return items[0];     //数组第一个元素
    };

    this.isEmpty = function(){ //判断队列有无成员
        return items.length == 0; //布尔值判断
    };

    this.clear = function(){ //清空队列
        items = [];   //变量重新赋值空数组
    };

    this.size = function(){ //获得队列的长度
        return items.length; 
    };

    this.print = function(){ //打印队列
        console.log(items.toString());
    };
}

下面是优先队列。数据成员入队的时候要携带数据和优先级。
优先级在这里的定义是数字越大在数组中的位置靠后。当插入一个数组元素的时候,先要根据它的优先级来判断,最小是直接插入到第一位,紧邻一个比他大的优先级是,就插入到这个邻居的前面。如果是最大的数字就插到数组的最后。
一维数组变成了二位数组。

function PriorityQueue() {

    let items = [];
     
    function QueueElement (element, priority){ 
            this.element = element;//成员本身
        this.priority = priority;  //优先级
    }

    this.enqueue = function(element, priority){
        let queueElement = new QueueElement(element, priority);

        let added = false; //添加标记
        for (let i=0; i<items.length; i++){
            if (queueElement.priority <            
 items[i].priority){  //找到优先级数字比他大的那个元素

                items.splice(i,0,queueElement);            
             // 插到这个元素的前面
                added = true;
                break; // 终止
            }
        }
        if (!added){ //如果是优先级数字是最大的,直接插入到
        //数组的末尾
            items.push(queueElement); //{5}
        }
    };
    
    //其他操作和普通队列是一样的

    this.dequeue = function(){
        return items.shift();
    };

    this.front = function(){
        return items[0];
    };

    this.isEmpty = function(){
        return items.length == 0;
    };

    this.size = function(){
        return items.length;
    };
    //print使用了es6里的拼接字符串的方法
    this.print = function(){
        for (let i=0; i<items.length; i++){
            console.log(`${items[i].element}  - ${items[i].priority}`);
        }
    };
}

let priorityQueue = new PriorityQueue();
priorityQueue.enqueue("John", 2);
priorityQueue.enqueue("Jack", 1);
priorityQueue.enqueue("Camila", 1);
priorityQueue.enqueue("Maxwell", 2);
priorityQueue.enqueue("Ana", 3);
priorityQueue.print();
//=>
//打印出的结果
Jack  - 1  //数组元素--优先级
Camila  - 1
John  - 2
Maxwell  - 2
Ana  - 3

在这个队列的基础上可以实现javascript中桥接模式的例子。本文算是一个独立的javascript队列的介绍,也作为桥接模式例子的背景方法。
javascript设计模式 第八章-桥接模式

    原文作者:smartphp
    原文地址: https://www.jianshu.com/p/351e12ae43d8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞