设计模式之工厂模式 (4)

简介: 设计模式之工厂模式 (4)

1、工厂模式(常用) ?

  • Creator 是个 工厂 产生 众多的 Product

网络异常,图片无法展示
|

  • new 相关 ?
    网络异常,图片无法展示
    |

  • 这是 JS 常用 场景 需要熟悉 知道这个 就足够!

网络异常,图片无法展示
|

  • java 工厂模式

网络异常,图片无法展示
|

  • 自己画一下

网络异常,图片无法展示
|

  • 代码 展示
class Product {
        constructor(name){
            this.name = name 
        }
        init(){
            alert('init')
        }
        fn1(){
            alert('fn1')
        }
        fn2(){
            alert('fn2')
        }
    }
    class Creator{
        create(name){
            return new Product(name)
        }
    }
    // test
    let creator = new Creator()
    let p = creator.create('p1')
    p.init() // init
    p.fn1() //  fn1
    p.fn2() //  fn2
复制代码
  • 可以 弹出 内容
  • 非常 重要的 实际应用 场景部分

网络异常,图片无法展示
|

  • jQuery ?

网络异常,图片无法展示
|

  • return new jQuery(selector)
    网络异常,图片无法展示
    |

  • React.createElement ?

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 我们需要知道 这个 React.createElement 做了 什么?

网络异常,图片无法展示
|

  • Vue 异步组件

网络异常,图片无法展示
|

  • 验证

网络异常,图片无法展示
|

2、单例模式(常用) ?

  • 注意 每次 获取的东西也是相同的 , 即 ===
  • js 常规使用 闭包 + 立即执行函数 实现
  • 十分重要的思想: 如果没有则初始化 如果有则使用
    网络异常,图片无法展示
    |

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • java 版本 演示

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • js 版本  利用闭包 但必须 注释 因为 外部new 不会报错

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 代码 展示 一下
class SingleObject{
        login(){
            console.log('login...')
        }
    }
    SingleObject.getInstance = (function () {
        let instance
        return function () {
            if(!instance){
            instance = new SingleObject()
        }
        return instance
        }   
    })()
    // test 
    const obj1 = SingleObject.getInstance()
    obj1.login()
    const obj2 = SingleObject.getInstance()
    obj2.login()
    // 单例模式 两者必须相同 
    console.log('obj1 ?=== obj2', obj1 === obj2)
复制代码
  • 执行 结果

网络异常,图片无法展示
|

  • 不能控制的情况
// 无法完全控制
    const obj3 = new SingleObject()
    console.log('obj1 ?=== obj3', obj1 === obj3) // obj1 ?=== obj3 false
复制代码

*单例模式 场景

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 代码 展示
class LoginStatus {
        constructor(){
            this.state = 'hide'
        }
        show(){
            if(this.state === 'show'){
                alert('已经显示') 
                return 
            }
            this.state = 'show'
            console.log('登录框显示成功')
        }
        hide(){
            if(this.state === 'hide'){
                alert('已经隐藏')
                return 
            }
            this.state = 'hide'
            console.log('登录框隐藏成功')
        }
    }
    LoginStatus.getInstance = (function () {
        let instance 
        return function () {
            if(!instance){
                instance =  new LoginStatus()
            }
            return instance
        }
    })()
    // test
    let login1 = LoginStatus.getInstance()
    login1.show() // 登录框显示成功
    let login2 = LoginStatus.getInstance()
    login2.hide() // 登录框隐藏成功
    console.log(login1 === login2) // true
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、适配器模式(常用) ?

  • 新 老代码 不兼容 优先考虑 适配器解决 不要 强制 全局替换

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 代码 演示
class Adaptee{
        specificRequest(){
            return '美国标准插头'
        }
    }
    class Target{
        constructor(){
            this.adaptee = new Adaptee()
        }
        request(){
            return `${this.adaptee.specificRequest()} - 转化器 - 中国标准插头`
        }
    }
    let target = new Target()
    let res = target.request()
    console.log(res) // 美国标准插头 - 转化器 - 中国标准插头
复制代码
  • 结果  非常 nice

网络异常,图片无法展示
|

  • 补充手动画一遍

网络异常,图片无法展示
|

  • 使用场景 展示 重要 !

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 新 老代码 不兼容 优先考虑 适配器解决 不要 强制 全局替换

网络异常,图片无法展示
|

  • 执行 适配后 代码 会走到 上面的 ajax 方法 中
  • 代码展示 vue computed
1、引用 vue cdn
  2、起一个 http-server 服务
  3、实现一个 字符串 逆序效果
复制代码
<body>
    <div id="test">
      <p>{{message}}</p>
      <p>{{reversemessage}}</p>
    </div>
  </body>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  <script>
    var vm = new Vue({
      el: "#test",
      data: {
        message: "Hello World",
      },
      computed: {
        reversemessage: function () {
          // 先转为数组 然后 反转 再转为 字符串
          return this.message.split("").reverse().join("");
        },
      },
    });
  </script>
复制代码
  • 注意 数组 和 字符串 常用转化

网络异常,图片无法展示
|

  • 设计模式 验证

网络异常,图片无法展示
|



相关文章
|
3月前
|
存储
用 OpenClaw 总结五千个工单的踩坑实践
拿到 100 多个格式混乱的 Markdown 值班工单问题文件,脚本规则处理效果极差,于是改用 Agent 模型推理来处理。然而实践中踩了三个坑:Agent 在长任务中自行跳过批次、读文件时静默截断在 2000 行、还会用格式推理"脑补"文件名导致读取失败。最终通过编写 Skill 固化读取流程,引入双 Agent 协同互检、用共享文件记录执行状态,才让任务稳定跑完。
273 0
|
运维 监控 网络协议
在线Ping详解:原理、应用与实用指南
在线Ping是基于浏览器的网络诊断工具,无需安装软件,支持ICMP/TCPing双协议、多节点并发测试,可快速检测连通性、延迟、丢包及路由路径,具备零门槛、全覆盖、可视化、强扩展等优势,广泛应用于故障排查、性能评估与跨境网络测试。(239字)
675 4
|
4月前
|
机器学习/深度学习 PyTorch 测试技术
PyTorch深度学习实战 |多头注意力机制
摘要:本文详细介绍了Transformer中的多头自注意力机制,从整体结构到实现细节,包括四部分内容:(1)多头自注意力的基本架构;(2)内部计算流程解析;(3)注意力计算公式详解;(4)代码实现。重点阐述了多头并行的计算方式、缩放点积注意力的计算步骤(QK转置、缩放、softmax和加权求和),以及残差连接和层归一化的作用。通过&quot;Are you OK?&quot;示例展示了输入张量如何经过8个64维注意力头处理后拼接成512维输出。文章最后提供了完整的PyTorch实现代码,并附测试用例验证模型
332 0
|
7月前
|
前端开发 中间件 API
【剪映小助手】快速开始
capcut-mate 是面向剪映的自动化辅助工具,提供草稿管理、媒体处理、字幕特效及视频生成能力,支持 OpenAPI 与桌面客户端。新增中英文双语支持、智能语言切换(基于 Accept-Language)、跨平台适配(Windows/Linux)及统一响应格式,开箱即用。
1461 6
|
8月前
|
人工智能 自然语言处理 运维
企业如何应用智能客服(2026年2月最新)
截至2026年,全球智能客服市场规模超870亿美元(CAGR 23.4%),中国大型企业渗透率达78%,中小企业达54%。本文详解如何以“能力边界、用户旅程、活知识、人机协同”四大原则,结合瓴羊Quick Service等实践方案,合规高效构建智能服务引擎,提升CSAT、FCR与商业转化。(239字)
|
XML JSON 安全
RESTful API设计规范
RESTful API设计规范
1725 0
RESTful API设计规范
|
安全 物联网 量子技术
量子密钥分发:保护信息传输安全
【10月更文挑战第1天】量子密钥分发(QKD)利用量子力学原理,如量子叠加和纠缠,实现安全密钥传输。它具有不可克隆性、无条件安全性和实时检测窃听等优势,适用于政府、军事和金融等领域。尽管面临建设成本高和标准化等挑战,但随着技术进步,QKD有望成为信息安全领域的主流技术,为信息传输提供坚实保障。
908 12
|
存储 人工智能 自然语言处理
阿里云的通义千问
5月更文挑战第15天
|
存储 程序员
操作系统(10)----从写程序到程序运行
操作系统(10)----从写程序到程序运行
522 1
|
XML JSON 移动开发
BpmnJS 元素属性的updateProperties 和updateModdleProperties的属性更新区别
BpmnJS 元素属性的updateProperties 和updateModdleProperties的属性更新区别
1105 1