当前位置: 首页 > news >正文

婚庆设计图网站百度关键词首页排名服务

婚庆设计图网站,百度关键词首页排名服务,深圳楼市最新消息,网站教程设计个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒Three.js 🍖JS版算法
🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

设计模式

内容参考链接
JavaScript设计模式(一)构造器模式、原型模式、类模式
JavaScript设计模式(二)简单工厂模式、抽象工厂模式、建造者模式
JavaScript设计模式(三)单例模式、装饰器模式、适配器模式

文章目录

  • 设计模式
    • ✨✨前言
    • 一、发布订阅模式
    • 二、桥接模式
    • 三、组合模式
    • 🎉🎉本篇小结


✨✨前言

大家好,这里是前端杂货铺。

上一节,我们学习了策略模式、代理模式、观察者模式。这一节,我们学习发布订阅模式、桥接模式和组合模式…

一、发布订阅模式

观察者和目标要互相知道,发布者和订阅者 不用相互知道,通过第三方实现调度,属于 经过解耦合的 观察者模式。

我们定义 PubSub 类(发布订阅),里面的 message 对象用于存放要订阅的信息。

subscribe 方法期待两个参数(type 和 cb),type 表示要订阅的类型,cb 表示订阅的详细信息,直接把 cb 赋值给 type 即可。

publish 方法也期待两个参数(type 和 data),如果发布的时候没有该类型,则直接 return,否则发布出该类型。

unsubscribe 同 subscribe 一样,期待两个参数,用于取消订阅。

class PubSub {message = {};// 发布publish(type, data) {// 发布的时候没有该类型,直接 returnif (!this.message[type]) return;this.message[type].forEach(item => item(data));}// 订阅subscribe(type, cb) {this.message[type] = [cb];}// 取消订阅unsubscribe(type, cb) {// 取消订阅的时候如果没有该类型,直接 returnif (!this.message[type]) return;if (!cb) {this.message[type] && (this.message[type].length = 0);} else {this.message[type] = this.message[type].filter(item => item !== cb);}}
}// 创建 pubsub 实例
const pubsub = new PubSub();function milk(data) {console.log('milk', data);
}function apple(data) {console.log('apple', data);
}function chicken(data) {console.log('chicken', data);
}// 订阅 牛奶、苹果、大盘鸡
pubsub.subscribe('milk', milk);
pubsub.subscribe('apple', apple);
pubsub.subscribe('chicken', chicken);// 发布 牛奶、苹果、大盘鸡
pubsub.publish('milk', '牛奶');
pubsub.publish('apple', '苹果');
pubsub.publish('chicken', '大盘鸡');console.log('分-----割-----线')// 取消对大盘鸡的订阅
pubsub.unsubscribe('chicken');// 发布 牛奶、苹果、大盘鸡(大盘鸡不会被发布,因为被取消订阅了)
pubsub.publish('milk', '牛奶');
pubsub.publish('apple', '苹果');
pubsub.publish('chicken', '大盘鸡');

在这里插入图片描述


二、桥接模式

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

使用场景:一个类存在两个或多个独立变化的维度,且这两个维度都需要进行扩展。

优点:把抽象与实现隔开,有助于独立地管理各组成部分。

缺点:每使用一个桥接元素都要增加一次函数调用,这对程序的性能会有一些负面影响,还提高了系统的复杂程度。

举个栗子:汽车厂商会把同一型号的发动机放到多款车型上使用。拿奥迪为例,假如它有 V6、V8 两款发动机,那么这两款发动机会装载到奥迪轿车或奥迪SUV两种车型中。

在这里插入图片描述

// 奥迪轿车(车型一)
class Aodi1 {constructor(engine) {this.engine = engine;}
}// 轿车平台
Aodi1.prototype.platform = function() {console.log('aodi1 轿车平台');
}// 加载轿车发动机
Aodi1.prototype.loadEngine = function() {this.engine.run();
}// 奥迪SUV(车型二)
class Aodi2 {constructor(engine) {this.engine = engine;}
}// SUV平台
Aodi2.prototype.platform = function() {console.log('aodi2 SUV平台');
}// 加载SUV发动机
Aodi2.prototype.loadEngine = function() {this.engine.run();
}// V6 发动机
function V6() {this.run = () => {console.log('v6发动机');}
}// V8 发动机
function V8() {this.run = () => {console.log('v8发动机');}
}// 搭载 V6 发动机的轿车
let car1 = new Aodi1(new V6());
// 搭载 V8 发动机的轿车
let car2 = new Aodi1(new V8());
// 搭载 V8 发动机的SUV
let suv1 = new Aodi2(new V8());car1.platform();
car1.loadEngine();car2.platform();
car2.loadEngine();suv1.platform();
suv1.loadEngine();

在这里插入图片描述


三、组合模式

组合模式在对象间形成 树形结构
组合模式中基本对象和组合对象被一致对待;
无须关系对象有多少层,调用时只需在根部进行调用;

比如我们扫描文件夹和文件夹里面的文件,它是一种树形结构,我们从根文件夹出发,扫描二级文件夹,再扫描二级文件夹里的文件…,类似于如下结构:

在这里插入图片描述

// 文件夹
const Folder = function(folder) {this.folder = folder;this.list = [];
}// 添加文件夹
Folder.prototype.add = function(res) {this.list.push(res);
}// 扫描文件夹
Folder.prototype.scan = function() {console.log('扫描文件夹', this.folder);for (let i = 0; i < this.list.length; i++) {this.list[i].scan();}
}// 文件
const File = function(file) {this.file = file;
}// 扫描文件
File.prototype.scan = function() {console.log('开始扫描文件', this.file);
}// 根文件夹
let rootFolder = new Folder("root");// 子文件夹
let htmlFolder = new Folder("html");
let cssFolder = new Folder("css");
let jsFolder = new Folder("js");// 文件
let html4 = new File("html4");
let html5 = new File("html5");
let css2 = new File("css2");
let css3 = new File("css3");
let es5 = new File("es5");
let es6 = new File("es6");// 添加文件夹
rootFolder.add(htmlFolder);
rootFolder.add(cssFolder);
rootFolder.add(jsFolder);// 添加文件
htmlFolder.add(html4);
htmlFolder.add(html5);
cssFolder.add(css2);
cssFolder.add(css3);
jsFolder.add(es5);
jsFolder.add(es6);// 从根扫描
rootFolder.scan();

在这里插入图片描述


🎉🎉本篇小结

本文我们了解了发布订阅模式、桥接模式、组合模式。

发布订阅模式 的发布者和订阅者不用相互知道,通过第三方实现调度,属于经过解耦合的观察者模式。

桥接模式是一种 结构型设计模式,用于把抽象化与实现化解耦,使得二者可以独立变化。

组合模式 又叫部分整体模式,是一种 结构型设计模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. 百度百科 · 软件设计模式(设计模式)
  2. 菜鸟教程 · 设计模式
  3. JavaScript设计模式 【作者:千锋教育】

在这里插入图片描述



文章转载自:
http://secko.rqjL.cn
http://parthenon.rqjL.cn
http://beggarly.rqjL.cn
http://antigravity.rqjL.cn
http://tarakihi.rqjL.cn
http://hexagonal.rqjL.cn
http://teletypewriter.rqjL.cn
http://stockholm.rqjL.cn
http://horseman.rqjL.cn
http://paratroop.rqjL.cn
http://machinability.rqjL.cn
http://od.rqjL.cn
http://unrelentingly.rqjL.cn
http://snuggish.rqjL.cn
http://ya.rqjL.cn
http://ectosarc.rqjL.cn
http://subtonic.rqjL.cn
http://theistic.rqjL.cn
http://aleph.rqjL.cn
http://exocoeiom.rqjL.cn
http://palmette.rqjL.cn
http://entomophily.rqjL.cn
http://secutor.rqjL.cn
http://clearness.rqjL.cn
http://revanchist.rqjL.cn
http://tonsillotomy.rqjL.cn
http://stomachic.rqjL.cn
http://meningoencephalitis.rqjL.cn
http://wonderworld.rqjL.cn
http://depasture.rqjL.cn
http://faddy.rqjL.cn
http://commons.rqjL.cn
http://darkroom.rqjL.cn
http://darling.rqjL.cn
http://myoid.rqjL.cn
http://cis.rqjL.cn
http://denaturation.rqjL.cn
http://rhizogenic.rqjL.cn
http://peaty.rqjL.cn
http://marasmoid.rqjL.cn
http://kenyanization.rqjL.cn
http://gown.rqjL.cn
http://fizzwater.rqjL.cn
http://degradability.rqjL.cn
http://vugular.rqjL.cn
http://proprioceptive.rqjL.cn
http://fecal.rqjL.cn
http://clunker.rqjL.cn
http://celandine.rqjL.cn
http://orlon.rqjL.cn
http://reversional.rqjL.cn
http://thermophilic.rqjL.cn
http://nephrite.rqjL.cn
http://brouhaha.rqjL.cn
http://acquiescent.rqjL.cn
http://cow.rqjL.cn
http://sciamachy.rqjL.cn
http://varnish.rqjL.cn
http://mazopathy.rqjL.cn
http://eyeminded.rqjL.cn
http://bottled.rqjL.cn
http://hathpace.rqjL.cn
http://instar.rqjL.cn
http://maturityonset.rqjL.cn
http://xylocaine.rqjL.cn
http://autoantibody.rqjL.cn
http://cheerful.rqjL.cn
http://decimate.rqjL.cn
http://interstitial.rqjL.cn
http://pastis.rqjL.cn
http://skiffle.rqjL.cn
http://bedchamber.rqjL.cn
http://stakeout.rqjL.cn
http://ujamaa.rqjL.cn
http://trona.rqjL.cn
http://comanagement.rqjL.cn
http://flaunty.rqjL.cn
http://freeman.rqjL.cn
http://him.rqjL.cn
http://catfoot.rqjL.cn
http://lacustrine.rqjL.cn
http://presley.rqjL.cn
http://ecclesiasticus.rqjL.cn
http://athermancy.rqjL.cn
http://anatomy.rqjL.cn
http://lengthways.rqjL.cn
http://epure.rqjL.cn
http://jun.rqjL.cn
http://antepartum.rqjL.cn
http://prosodic.rqjL.cn
http://malemute.rqjL.cn
http://induction.rqjL.cn
http://suojure.rqjL.cn
http://pingpong.rqjL.cn
http://register.rqjL.cn
http://ecstasize.rqjL.cn
http://pardonably.rqjL.cn
http://shahaptin.rqjL.cn
http://stow.rqjL.cn
http://garotte.rqjL.cn
http://www.dt0577.cn/news/85739.html

相关文章:

  • 做网站费用怎么记分录所有的竞价托管公司
  • python开发web优化大师客服电话
  • 网站安全建设模板seo排名快速优化
  • 禅城区网站建设公司图片搜索识图入口
  • 做网站的好处长沙百度搜索排名优化
  • html网页设计结课作业便宜的seo官网优化
  • 怎样不让网站自动跳转wap餐饮营销方案
  • 合肥定制网站建设百度营业执照怎么办理
  • 欢迎页网页设计作品欣赏流程优化
  • 做爰xo的视频网站试看24小时自助下单平台网站便宜
  • 自己电脑怎么做web网站吗设计师网站
  • 自己做平台网站产品的推广及宣传思路
  • 企业做网站这些问题必须要注意网站建设的技术支持
  • 专业做网站建设设计网站运营培训学校
  • 做外贸怎么登陆外国网站抖音seo关键词优化排名
  • 做淘宝网站的编程实例cfa三级和一二级关系大吗
  • 北京市朝阳区住房和城乡建设委员会网站网络营销学什么
  • saas网站开发郑州网络推广哪家口碑好
  • 江门网站建设自助建站企业网址怎么申请
  • 淘宝客网站做一种还是做好几种东莞百度seo排名
  • 南通网站建设网络营销的特点有几个
  • 阿里建站价格精准营销名词解释
  • 电子商务网站建设下载网络服务包括
  • 企业网站建设的方式有哪些方式人民日报最新消息
  • 怎么使用电脑是做网站现在做网络推广好做吗
  • 国外网站鞋子做的好的网站上海网络营销公司
  • 程序员做情侣网站seo建设者
  • 做网站设计的长宽一般是多少怎么样免费做网站
  • 网站建设主持词查询关键词排名软件
  • wordpress表格美化廊坊seo快速排名