【设计模式】模块模式和桥接模式

server/2024/9/22 23:13:32/

模块模式

模块化模式最初被定义为在传统软件工程中为类提供私有和公共封装的一种方法。

能够使一个单独的对象拥有公共/私有的方法和变量,从而屏蔽来自全局作用域的特殊部分。这可以减少我们的函数名与在页面中其他脚本区域内定义的函数名冲突的可能性。

闭包:

// 闭包 模块模式
const obj = (function() {let count = 0return {add: function () {count++return count},reduce: function () {count--return count}}}
)()
<html>
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body>
<script src="index.js"></script>
<script>javascript">console.log(obj)
</script>
</body>
</html>

es6模块化:

let count = 0
function add() {count++return count
}
function reduce() {count--return count
}
export default {add,reduce
}
<html>
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body>
<!--<script src="index.js"></script>-->
<script type="module">javascript">import obj from './index.js'console.log(obj)
</script>
</body>
</html>

桥接模式

桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
使用场景:一个类存在两个或多个独立变化的维度,且这两个维度都需要进行扩展

  • 优点:
    把抽象与实现隔离开,有助于独立地管理各组成部分。
  • 缺点:
    每使用一个桥接元素都要增加一次函数调用,这对应用程序的性能会有一些负面影响一一提高了系统的复杂程度。

比如,一个 toast ,给一个元素绑定动画效果,可以将动画效果的实现隔离,从而不同的 toast 可以在 与不同的动画相结合。

const Animation = {fade: {show: function (element) {console.log(element, 'fade show');},hide: function (element) {console.log(element, 'fade hide');}},slide: {show: function (element) {console.log(element, 'slide show');},hide: function (element) {console.log(element, 'slide hide');}}
}function Toast(element, animation) {this.element = element;this.animation = animation;
}Toast.prototype.show = function () {this.animation.show(this.element);
}
Toast.prototype.hide = function () {this.animation.hide(this.element);
}const toast = new Toast('div', Animation.fade);
toast.show();
setTimeout(() => {toast.hide();
}, 1000)

http://www.ppmy.cn/server/105057.html

相关文章

Spring系列之Spring Cache缓存注解的使用

目录 一、概述 二、缓存注解 1、Cacheable 缓存结果 2、CachePut 更新缓存 3、CacheEvict 清除缓存 4、Caching 组合缓存&#xff08;不常用&#xff09; 5、CacheConfig 类级别缓存配置&#xff08;不常用&#xff09; 6、CacheResult 设置缓存超时&#xff08;不常用…

数据采集-->kafka-->hdfs

数据采集到kafka flume: a1.sources r1 a1.channels c1a1.sources.r1.type TAILDIR a1.sources.r1.filegroups f1 a1.sources.r1.filegroups.f1 /opt/installs/flume1.9/job/a.log a1.sources.r1.positionFile /opt/installs/flume1.9/job/taildir-kafka.jsona1.channe…

【日常总结】阿里云:windows server 过一段时间登录不进去,或提示:出现身份验证错误。 无法连接到本地安全机构

场景 阿里云 : ESC系统&#xff1a;windows server 2022 问题 无法登录&#xff0c;或者登录浸提提示密码已过期 原因 密码设置了过期时间 解决方案 修改密码策略&#xff1a;密码设置永不过期 打开“本地安全策略”编辑器&#xff1a;运行 secpol.msc。 导航至“账户…

【leetcode】 27. 移除元素

题目&#xff1a; 题目链接 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行…

基于单片机车载酒精浓度的检测系统

摘 要&#xff1a; 为了有效地防止驾驶员酒后驾车的行为&#xff0c;设计了一种基于单片机车载酒精浓度的检测系统 。 该系统由酒精传感器、 A/D 转换器 、 AT89S52 单片机控制器 、 语音报警 、 LCD 液晶显示 、 LED 指示灯 、 车门锁传感器 、 压力传感器和继电器等构成。 当…

单线程环境下,用时间做为单一文件名称全局唯一处理

package org.example.file;import java.util.concurrent.ConcurrentHashMap;public class FileHelper {private FileService fileService;//全局唯一&#xff0c;用于控制文件时间全局唯一//value&#xff1a;0&#xff1a;没被消费&#xff0c;1&#xff1a;被消费public stat…

EasyCVR视频汇聚平台革新播放体验:WebRTC协议赋能H.265视频流畅传输

随着科技的飞速发展和网络技术的不断革新&#xff0c;视频监控已经广泛应用于社会各个领域&#xff0c;成为现代安全管理的重要组成部分。在视频监控领域&#xff0c;视频编码技术的选择尤为重要&#xff0c;它不仅关系到视频的质量&#xff0c;还直接影响到视频的传输效率和兼…

Tensorflow实现深度学习案例7:咖啡豆识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一、前期工作 1. 导入数据 from tensorflow import keras from tensorflow.keras import layers,models import numpy as np import matplotlib.pyplot as plt import os,PIL,p…