设计模式之工厂模式 (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>
复制代码
  • 注意 数组 和 字符串 常用转化

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

  • 设计模式 验证

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



相关文章
|
设计模式 算法 程序员
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
作为开发者,我们在日常开发过程中,往往会遇到反复修改bug的情况,而且不能一次性把代码写的完美无瑕,其实开发项目是一项复杂而富有挑战性的任务,即使经验丰富的程序员也难以在一次性编写完美无瑕地完成代码,我个人觉得一次性写好代码是不可能完成的事情。虽然在设计之初已经尽力思考全面,并在实际操作中力求精确,但程序员仍然需要花费大量时间和精力来调试和修复Bug。那么本文就来分享程序员需要反复修改Bug的原因,以及在开发中所面临的复杂性与挑战。
546 1
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
|
资源调度
There appears to be trouble with your network connection.Retrying
There appears to be trouble with your network connection.Retrying
2242 0
There appears to be trouble with your network connection.Retrying
|
敏捷开发 存储 安全
潜力与限制:低代码开发平台优缺点全面分析
低代码开发平台加速企业数字化转型,优点包括快速开发、降低技术门槛、灵活定制和方便维护。然而,也存在复杂功能限制、数据孤岛、供应商依赖和安全合规问题。推荐的低代码平台有Zoho Creator(适合中小企业)、Mendix(创新型企业)、Microsoft Power Apps(大型企业)、OutSystems(高安全合规要求)以及AppSheet和Appian(入门级用户)。在选择时,需综合考虑业务需求、技术因素和风险。
1463 0
|
机器学习/深度学习 编解码 监控
算法金 | 深度学习图像增强方法总结
**图像增强技术概括** 图像增强聚焦于提升视觉效果和细节,广泛应用于医学、遥感等领域。空间域增强包括直方图均衡化(增强对比度)、对比度拉伸、灰度变换、平滑滤波(均值、中值)和锐化滤波(拉普拉斯、高通)。频率域增强利用傅里叶变换、小波变换,通过高频和低频滤波增强图像特征。现代方法涉及超分辨率重建、深度学习去噪(如CNN、Autoencoder)、图像修复(如GAN)和GANs驱动的多种图像处理任务。
907 14
算法金 | 深度学习图像增强方法总结
|
Ubuntu 开发工具 git
在Ubuntu 18.04上安装Git【快速入门】
在Ubuntu 18.04上安装Git【快速入门】
279 0
|
JavaScript Java 测试技术
基于springboot+vue.js的电影订票及评论网站附带文章和源代码设计说明文档ppt
基于springboot+vue.js的电影订票及评论网站附带文章和源代码设计说明文档ppt
218 6
|
SQL 存储 安全
【SQL刷题】Day3----SQL必会的常用函数专项练习
【SQL刷题】Day3----SQL必会的常用函数专项练习
386 0
【SQL刷题】Day3----SQL必会的常用函数专项练习
|
Oracle Java 关系型数据库
输入java -version 命令行没反应的简单解决办法【亲测有效】
输入java -version 命令行没反应的简单解决办法【亲测有效】
1553 0
|
存储 机器学习/深度学习 人工智能
摆脱 OpenAI 依赖,8 分钟教你用开源生态构建全栈 AI 应用
大模型时代的到来使得 AI 应用开发变得更加轻松、省时,尤其是在 CVP Stack 的范式下,开发者甚至可以用一个周末的时间做出一个完整的应用程序。
887 1
|
Java API Android开发

热门文章

最新文章