设计模式 结构型 外观模式(Facade Pattern)与 常见技术框架应用 解析
外观模式(Facade Pattern)是一种结构型设计模式,它的核心思想是将一个复杂的子系统封装在一个外观类中,为子系统提供一个统一的接口。通过这个接口,客户端可以简化对子系统的访问,而无需直接与子系统中的各个组件进行交互。这种设计模式有助于减少系统的复杂性,提高系统的易用性和可维护性。
一、核心思想
外观模式的核心思想在于“通过一个统一的接口来访问子系统中的一群接口,让子系统更容易使用”。它隐藏了子系统的复杂性,使得客户端代码可以通过一个简单的接口来访问子系统的功能,从而降低了客户端与复杂子系统之间的耦合度。
二、定义与结构
定义:
外观模式为子系统中的一组接口提供一个统一的接口,使得这一子系统更加容易使用。
结构:
外观模式主要包含以下几个角色:
- 外观角色(Facade):外观类是外观模式的核心,它定义了一个简化的接口,用于访问子系统中的功能。外观类内部包含了对子系统中各个组件的引用,并通过组合这些组件来提供客户端需要的功能。
- 子系统角色:子系统是一系列类和接口的集合,它们实现了特定的功能。子系统可以独立运行,但客户端通常需要通过外观类来访问它们的功能。
角色
在外观模式中,主要角色包括:
- 外观类(Facade):封装了子系统的接口,提供一个统一的接口给客户端使用。
- 子系统类:实现了具体的功能,被外观类所引用和组合。
三、实现步骤及代码示例
以下是一个使用C++实现外观模式的示例:
假设我们有一个复杂的图形处理系统,该系统由多个类组成,如Circle
、Rectangle
、Triangle
等,每个类都负责绘制其对应的图形。现在,我们想要提供一个简单的接口给最终用户,让他们无需关心具体的图形实现细节,就能轻松绘制出想要的图形组合。
1. 定义具体的图形类:
// Circle.h
class Circle {
public:void draw() {std::cout << "Drawing Circle\n";}
};// Rectangle.h
class Rectangle {
public:void draw() {std::cout << "Drawing Rectangle\n";}
};// Triangle.h
class Triangle {
public:void draw() {std::cout << "Drawing Triangle\n";}
};
2. 创建外观类:
// ShapeFacade.h
#include "Circle.h"
#include "Rectangle.h"
#include "Triangle.h"class ShapeFacade {
private:Circle* circle;Rectangle* rectangle;Triangle* triangle;public:ShapeFacade() : circle(new Circle()), rectangle(new Rectangle()), triangle(new Triangle()) {}~ShapeFacade() {delete circle;delete rectangle;delete triangle;}void drawAllShapes() {circle->draw();rectangle->draw();triangle->draw();}
};
3. 客户端使用外观类:
// main.cpp
#include <iostream>
#include "ShapeFacade.h"int main() {ShapeFacade facade;facade.drawAllShapes(); // 客户端只需通过外观类来调用return 0;
}
在这个示例中,ShapeFacade
类封装了Circle
、Rectangle
和Triangle
类的接口,并提供了一个drawAllShapes
方法来绘制所有图形。客户端只需与ShapeFacade
类交互,即可轻松绘制出想要的图形组合。
四、常见技术框架应用
在实际的技术框架中,比如Spring MVC中,控制器(Controller)通常扮演着外观的角色,它封装了业务逻辑层和服务层之间的复杂性,并向视图层提供了一个简化的接口。
1、Web开发框架
外观模式(Facade Pattern)在前端框架中的应用主要体现在封装复杂功能、简化接口调用以及提高代码的可维护性和可扩展性方面。以下是一些前端框架中应用外观模式的示例和代码说明:
Vue.js中的外观模式应用
在Vue.js中,外观模式常用于封装复杂的组件或功能,以便在应用中更轻松地重用和管理。例如,我们可以创建一个外观组件来封装多个子组件,并提供一个统一的接口来访问这些子组件的功能。
假设我们有一个复杂的表单,包含多个输入字段和验证逻辑。我们可以创建一个FormFacade
组件来封装这些字段和验证逻辑。
<!-- FormFacade.vue -->
<template><div><input-field v-model="formData.username" :rules="usernameRules"></input-field><input-field v-model="formData.email" :rules="emailRules"></input-field><input-field v-model="formData.password" :rules="passwordRules"></input-field><button @click="submitForm">Submit</button></div>
</template><script>
import InputField from './InputField.vue';export default {components: {InputField},data() {return {formData: {username: '',email: '',password: ''},usernameRules: [{ required: true, message: 'Username is required', trigger: 'blur' }],emailRules: [{ required: true, message: 'Email is required', trigger: 'blur' },{ type: 'email', message: 'Email is not valid', trigger: ['blur', 'change'] }],passwordRules: [{ required: true, message: 'Password is required', trigger: 'blur' },{ min: 6, message: 'Password must be at least 6 characters', trigger: 'blur' }]};},methods: {submitForm() {// 这里可以添加表单验证和提交逻辑console.log('Form data:', this.formData);}}
};
</script>
在这个示例中,FormFacade
组件封装了多个InputField
子组件,并提供了一个submitForm
方法来处理表单的提交和验证。这样,我们就可以在应用中轻松地重用这个表单组件,而无需关心其内部的复杂逻辑。
React中的外观模式应用
在React中,外观模式常用于封装复杂的业务逻辑或UI组件,以便在应用中更轻松地管理和重用。例如,我们可以创建一个高阶组件(HOC)来作为外观组件,封装多个子组件并提供一个统一的接口。
假设我们有一个复杂的登录表单,包含用户名、密码和提交按钮。我们可以创建一个LoginFacade
高阶组件来封装这些组件。
// LoginFacade.jsx
import React, { useState } from 'react';
import InputField from './InputField';const LoginFacade = ({ onSubmit }) => {const [formData, setFormData] = useState({username: '',password: ''});const handleChange = (e) => {const { name, value } = e.target;setFormData({ ...formData, [name]: value });};const handleSubmit = (e) => {e.preventDefault();onSubmit(formData);};return (<form onSubmit={handleSubmit}><InputField name="username" placeholder="Username" value={formData.username} onChange={handleChange} /><InputField name="password" placeholder="Password" type="password" value={formData.password} onChange={handleChange} /><button type="submit">Login</button></form>);
};export default LoginFacade;
在这个示例中,LoginFacade
高阶组件封装了登录表单的UI和业务逻辑,并提供了一个onSubmit
回调来处理表单的提交。这样,我们就可以在应用中轻松地重用这个登录表单组件,而无需关心其内部的复杂逻辑。
2、数据分析框架
在数据分析框架中,外观模式可以用于封装数据预处理、模型训练和结果评估等功能,使得数据分析过程更加简洁和高效。
虽然外观模式在各种技术框架中的具体实现会有所不同,但其核心思想都是一致的。
五、应用场景
外观模式适用于以下场景:
- 当需要将多个子系统集成到一个较大的系统中时,外观模式可以提供一个简单的接口来管理这些子系统。
- 当需要提供一个库的简化接口时,外观模式可以隐藏库的复杂性,使得客户端代码更容易使用。
- 当客户端需要与复杂系统交互,但只需要访问系统的一部分功能时,外观模式可以简化客户端的调用。
- 当需要控制对子系统的访问,或者需要在子系统操作前后执行额外的逻辑时,外观模式可以提供这样的控制。
六、优缺点
优点:
- 降低了子系统与客户端之间的耦合度:使得子系统的变化不会影响调用它的客户类,便于子系统内部维护和扩展。
- 对客户屏蔽了子系统组件:减少了客户处理的对象数目,并使得子系统使用起来更加容易,降低了复杂性。
- 提高了系统的可维护性和可扩展性:通过提供一个简单的接口,隐藏了子系统的复杂性,使得系统更容易维护和扩展。
缺点:
- 不能很好地限制客户端使用子系统:外观模式可能会暴露过多的子系统功能,使得客户端能够访问到不应该访问的功能。
- 增加了新的子系统可能需要修改外观类:当子系统发生变化时,可能需要修改外观类以适应新的功能需求,这可能会违背设计模式中的“开闭原则”(对扩展开放,对修改关闭)。
综上所述,外观模式是一种非常实用的设计模式,特别适用于复杂的系统。通过提供一个简单的接口来减少客户端与子系统之间的耦合,可以提高系统的可维护性和可扩展性。然而,在使用外观模式时也需要注意其潜在的缺点,并尽量避免过度设计。
相关文章:
设计模式 结构型 外观模式(Facade Pattern)与 常见技术框架应用 解析
外观模式(Facade Pattern)是一种结构型设计模式,它的核心思想是将一个复杂的子系统封装在一个外观类中,为子系统提供一个统一的接口。通过这个接口,客户端可以简化对子系统的访问,而无需直接与子系统中的各…...
《learn_the_architecture_-_generic_interrupt_controller_v3_and_v4__lpisn》学习笔记
1.LPI(Locality-specific Peripheral Interrupts)是一种基于消息的中断(Message Signaled Interrupt,MSI),由中断翻译服务(ITS)提供翻译。这是因为LPI的设计目标是为系统中大量的设备提供高效的中断管理&am…...
java 常量池详解
目录 java 常量池详解一 静态常量池(Static Constant Pool)1.1 概述1.2 存储内容1.3 特点1.4 示例 二 运行时常量池(Runtime Constant Pool)2.1 概述2.2 存储内容2.3 特点2.4 示例 三 基础类型常量池(Primitive Type C…...
aardio —— 虚表 —— 模拟属性框
写了个简单的属性框例程,抛砖引玉,期待你做出更丰富强大的功能。 可折叠行、可输入文本、可下拉选择、支持下拉选择图片、颜色等功能。 只有想不到,没有做不到,发挥你的想象力吧。 import win.ui; import godking.comboboxEx im…...
企业微信——智能表格学习
智能表格 应用限制条件 获取 token https://developer.work.weixin.qq.com/document/10013#%E5%BC%80%E5%8F%91%E6%AD%A5%E9%AA%A4 开发步骤 你可以通过以下步骤,使用access_token来访问企业微信的接口。需要注意的是,所有的接口需使用Https协议、Js…...
2501d,jingo优化
原文 大家好,我重构和优化了一下jin.go这里: 我去掉了vibe.d依赖,因为它又慢又大,而且我无法与2版本交朋友.当仅运行1000个vibe纤程时,不仅应用崩溃,甚至图形系统驱动也崩溃一次,这需要重启笔记本电脑. 当前,我用小栈大小的本地流(4kb)解决. 我真很期待photon的稳定性,以恢复支…...
实景三维点云处理专业软件ArcGIS根据DSM生成地表点云集
常见的实景三维处理软件及其特色功能如下: 一、专业实景三维建模软件 Agisoft Metashape 高精度建模:能够生成高精度的三维模型,精度可以达到厘米级甚至毫米级,适用于需要详细测量和分析的项目,如文物保护和建筑测量。…...
山东大学人工智能导论期末复习概念汇总
人工智能概念汇总V2 —Nevertheless 简介 [!NOTE] 本文是在原版的基础上,面向期末而进行的删减版本 建议使用pdf版本,排版和图片显示完全。如有需要,可私信发送邮箱地址 PDF版本: 山东大学人工智能导论概念汇总pdf版 山东大学软…...
Ubuntu下安装Android Sdk
下载android sdk命令行工具 https://developer.android.com/studio?hlzh-cn#command-tools mkdir android-sdk cd android-sdk unzip commandlinetools-linux-11076708_latest.zip 添加环境变量到~/.bashrc export ANDROID_HOME$HOME/android-sdk export PATH$PATH:$ANDRO…...
c语言中GHashTable的使用
前言:最近在c代码中需要用到键值对的存储,由于没有map,需要自己实现或者使用库函数,g_hash_table_new是GLib中的库函数,但使用起来会有很多坑,记录一下 构建hash表g_hash_table_new GHashTable* g_hash_table_new(GH…...
Conda清理缓存
参考:1、2...
【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置
1、HarmonyOS 无法导入cardEmulation? 在工程entry mudule里的index.ets文件里导入cardEmulation失败 可以按照下面方式添加SystemCapability;在src/main/syscap.json(此文件需要手动创建)中添加如下内容 {"devices": {"gen…...
【从零开始入门unity游戏开发之——C#篇42】C#补充知识——随机数(Random)、多种方法实现string字符串拼接、语句的简写
文章目录 一、随机数1、Random.Next()生成随机整数示例:生成一个随机整数生成指定范围内的随机整数 2、Random.NextSingle生成随机浮点数示例:生成随机浮点数 3、 生成随机字母或字符示例:生成随机字母示例:生成随机小写字母 二、…...
深入解析 Conda 安装的默认依赖包及其作用:conda create安装了哪些包(中英双语)
深入解析 Conda 安装的默认依赖包及其作用 当我们使用 Conda 创建新环境时,例如执行命令: conda create -n olmes python3.10Conda 会自动为我们安装一系列基础依赖包,保证 Python 环境能够正常运行。这些包不仅是我们开发的基础工具&#…...
《Vue3实战教程》35:Vue3测试
如果您有疑问,请观看视频教程《Vue3实战教程》 测试 为什么需要测试 自动化测试能够预防无意引入的 bug,并鼓励开发者将应用分解为可测试、可维护的函数、模块、类和组件。这能够帮助你和你的团队更快速、自信地构建复杂的 Vue 应用。与任何应用一…...
Mysql监视器搭建
Mysql监视器搭建 资源下载在:Mysql监视器资源包 查询问题:CPU、连接数、慢查询 --> 暴增 1、exporter进行Mysql信息采集 修改my.cnf [client] userroot password数据库密码 host:数据库URL port3306启动命令 mysqld_exporter.exe --config.my-c…...
Linux(centos)安装 MySQL 8 数据库(图文详细教程)
前言 前几天写了个window系统下安装Mysql的博客,收到很多小伙伴私信需要Linux下安装Mysql的教程,今天这边和大家分享一下,话不多说,看教程。 一、删除以前安装的MySQL服务 一般安装程序第一步都需要清除之前的安装痕迹ÿ…...
软件工程大作业——图书管理系统/图书个性化推荐与实现系统
目录 1 绪论 1.1研究背景 1.2研究现状 1.3研究内容 2 系统关键技术 2.1 Spring Boot框架 2.2 JAVA技术 2.3 MYSQL数据库 2.4 B/S结构 3 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2 系统性能分析 3.3 系统功能分析 3.4系统流程分析 3.4.1登…...
Linux下编译安装PETSc
本文记录在Linux下编译安装PETSc的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1oneAPI2024.2.1 一、安装依赖 1.1 安装oneAPI 参见:Get the Intel oneAPI Base Toolkit , Get the Intel oneAPI HPC Toolkit 1.2 安…...
检索增强生成
概述 检索增强生成(Retrieval-Augmented Generation,RAG)是一种将信息检索与语言模型相结合的技术。由Facebook AI Research于2020年提出,它把数据库的优势与语言模型的优势相结合。它能让模型从外部知识库中检索信息,…...
九、Vue 事件处理器
文章目录 前言一、基础事件绑定:v-on 指令二、方法调用:组织有序的交互逻辑三、事件修饰符阻止冒泡与默认事件捕获与自身触发单次触发与鼠标按键区分四、按键修饰符前言 在 Vue.js 的交互世界里,事件处理器起着举足轻重的作用,它让页面从静态展示迈向动态交互,精准捕捉用户…...
stm32内部flash在线读写操作
stm32内部flash在线读写操作 📍相关开源库文章介绍《STM32 利用FlashDB库实现在线扇区数据管理不丢失》 ✨不同系列,内部flash编程有所区别。例如stm32f1是按照页擦除,半字(16bit)或全字(32bit)数据写入;st…...
DuckDB:密钥管理器及其应用
密钥管理器(Secrets Manager)为所有使用密钥的后端提供了统一的用户界面。密钥信息可以被限定范围,因此不同的存储前缀可以有不同的密钥信息,例如允许在单个查询中连接跨组织的数据。密钥也可以持久化,这样就不需要在每次启动DuckDB时都指定它…...
每日一学——自动化工具(Ansible)
3.1 Ansible 3.1.1 Playbook编写指南 嘿,小伙伴们!你们知道吗,运维工作其实也可以变得像搭积木一样简单!今天我们要介绍的就是Ansible,一款非常流行的自动化运维工具。通过Ansible,我们可以用Playbook来描…...
typescripts语法笔记
游戏引擎:图形渲染系统,特效系统,物理系统,各个功能集合。 cocoscreator是将cocos2d-x封装成了可视化编辑。面向对象转变成面向组件开发。 ts编程是js编程语言的超集。 基础类型""可以转换成字符串类型,适用…...
TypyScript从入门到精通
TypyScript从入门到精通 TypyScript 是什么?增加了什么环境搭建二、为何需要 TypeScript三、编译 TypeScript四、类型声明五、类型推断基本类型六、类型总览JavaScript 中的数据类型TypeScript 中的数据类型1. 上述所有 JavaScript 类型2. 六个新类型:3.…...
vscode代码AI插件Continue 安装与使用
“Continue” 是一款强大的插件,它主要用于在开发过程中提供智能的代码延续功能。例如,当你在编写代码并且需要进行下一步操作或者完成一个代码块时,它能够根据代码的上下文、语法规则以及相关的库和框架知识,为你提供可能的代码续…...
STM32-笔记20-测量按键按下时间
1、按键按下的时间-思路 我们先检测下降沿信号,检测到以后,在回调函数里切换成检测上升沿信号,当两个信号都检测到的时候,这段时间就是按键按下的时间,如图所示:>N*(ARR1)CCRx的值 N是在这段时间内&…...
继承与多态 - 继承机制、虚函数、纯虚函数
引言 C 是一种支持面向对象编程(OOP)的编程语言,继承和多态是 OOP 的两个核心概念。通过继承,我们可以创建新的类,这些新类可以重用现有类的代码,并且可以根据需要进行扩展或修改。多态则允许我们编写更加…...
微信小程序:正确输出<小于,大于>符号
错误写法 1、如果直接输入<符号会直接报错,>能正常使用,如图标红的是错误写法 2、输入html的<>的写法,会原样输入符号 解决方法 采用变量的方式输出 1、js写入变量 2、wxml直接写...
uni-app tab 双击事件监听
1、data中定义属性,用于临时记录点击次数 tabClick: {touchNum: 0 },2、添加页面事件监听方法 onTabItemTap(e) {this.tabClick.touchNumsetTimeout(()>{if(this.tabClick.touchNum > 2){// 双击执行代码区}this.tabClick.touchNum 0}, 250) },个人博客&am…...
GIT 企业级开发学习 1_基本操作
本节主要命令: git init ls 不能列出 .git ls -a 列出 .git 创建本地仓库 1. 初始化 Git 仓库 git init • 初始化一个新的 Git 仓库,在当前目录下生成一个 .git 隐藏文件夹,用于存储版本控制信息。 2. 查看隐藏文件 ls -a • 使用 ls …...
Computed在Vue2、Vue3写法的不同
在 Vue 2 和 Vue 3 中,computed 的写法有一些区别,特别是在 Vue 3 中新增了组合式 API 和 setup 语法糖。以下是不同写法的详细比较: 1. Vue 2 选项式 API 写法 在 Vue 2 中,computed 是一个选项,直接在 computed 对…...
Hive集群安装部署
上传安装包并解压 cd /ddhome/tools tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /ddhome/bin/ cd /ddhome/bin/ mv apache-hive-3.1.2-bin hive注意:如果Hive要使用Spark计算引擎,需要重新编译Hive, 这里已经编译完毕 修改配置文件 cd …...
卸载干净 IDEA(图文讲解)
目录 1、卸载 IDEA 程序 2、注册表清理 3、残留清理 1、卸载 IDEA 程序 点击屏幕左下角 Windows 图标 -> 设置-控制面板->intellij idea 勾选第一栏 Delete IntelliJ IDEA 2022.2 caches and local history,表示同时删除 IDEA 本地缓存以及历史。 Delete I…...
Gitea代码仓服务搭建
特点与优势 轻量级:Gitea是一个轻量级的Git服务,提供了快速、稳定的代码托管和协作开发环境。它资源占用低,适合在资源受限的环境中运行。易于安装和部署:Gitea提供了简单易用的安装和部署方式,支持多种安装方式,包括二进制文件、Docker容器等,并提供了详细的文档和配置…...
什么情况会导致JVM退出?
大家好,我是锋哥。今天分享关于【什么情况会导致JVM退出?】面试题。希望对大家有帮助; 什么情况会导致JVM退出? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM(Java Virtual Machine,Java虚…...
docker 安装influxdb
docker pull influxdb mkdir -p /root/influxdb/data docker run -d --name influxdb -p 8086:8086 -v /root/influxdb/data:/var/lib/influxdb influxdb:latest#浏览器登录:http://192.168.31.135:8086,首次登录设置用户名密码:admin/admin1…...
TLS: WebRTC中ThreadManager的线程局部存储
1. 什么是线程局部存储: 线程局部存储(TLS,Thread-Local Storage): 线程局部存储(TLS)允许每个线程保存一份独立的数据副本,避免多个线程共享数据导致的竞争问题。 每个线程可以根…...
[Qt] 万字详解 | 常用控件 | Button | Label | LCD | ProgressBar
目录 按钮类控件 1、Push Button 按钮 2、Radio Buttion 单选 click、press、release、toggled 的区别 3、Check Box 复选 4、Tool Button 显示类控件 1、Label 2、LCD Number 3、ProgressBar 4、Calendar Widget 按钮类控件 1、Push Button 按钮 概述:…...
【数据仓库】hadoop3.3.6 安装配置
文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本,所以有些配置,是可以不用做的,下面仅记录新增操作&#…...
ffmpeg八大开发库
FFmpeg八大库是指FFmpeg项目中最重要的八个库,它们各自承担不同的功能,共同构成了FFmpeg的强大功能。以下是这八大库的详细介绍: libavcodec:负责音频和视频的编解码。它支持多种编解码器,如H.264、AAC、MP3、…...
Uniapp中使用`wxml-to-canvas`开发DOM生成图片功能
Uniapp中使用wxml-to-canvas开发DOM生成图片功能 在移动端开发中,生成图片是一个常见需求,例如用于分享海报、生成动态二维码等。在Uniapp框架中,我们可以通过wxml-to-canvas插件轻松实现将DOM转化为图片的功能。本文将详细介绍如何在Uniapp…...
【09】深入解析 Three.js 官网示例:下雪粒子特效与场景渲染的实现(webgpu_compute_particles_snow.html)
引言 Three.js 是一个强大的 JavaScript 库,用于在网页上创建和渲染 3D 场景。本文将深入分析一段 Three.js 官网示例代码,详细解释其实现思路和主要功能代码,帮助读者更好地理解和掌握 Three.js 的应用。官网代码地址:https://g…...
电子价签会是零售界的下一个主流?【新立电子】
电子价签,作为一种能够替代传统纸质标签的数字显示屏,已经在零售行业中展现出其巨大的潜力。它具有实时更新、集中管理、高效节能的特点,实现价格的实时更新,大大减少更新价格的工作量和时间。为消费者带来更加便捷、准确的购物体…...
uniapp——App下载文件,保存、打开文件(二)
uniapp如何下载文件、保存、打开文件 时光荏苒,2024即将过去! 迈向2025,祝大家新的一年工作顺利、万事如意,少一点BUG,涨一点工资…↖(ω)↗ 文章目录 uniapp如何下载文件、保存、打开文件下载文件保存并打开文件处理 …...
如何轻松关闭 iPhone 上的 HEIC [HEIC 图像技巧]
您是否正在为关闭 iPhone 上的 HEIC 而烦恼?你不是一个人; Apple 的首选图像文件格式仍可能存在一些兼容性问题。当您与某人共享照片或尝试在Windows计算机上打开图像时,就会出现此问题。幸运的是,Apple 使关闭 HEIC iPhone 变得更加容易。 …...
库伦值自动化功耗测试工具
1. 功能介绍 PlatformPower工具可以自动化测试不同场景的功耗电流,并可导出为excel文件便于测试结果分析查看。测试同时便于后续根据需求拓展其他自动化测试用例。 主要原理:基于文件节点 coulomb_count 实现,计算公式:电流&…...
[paddle] 非线性拟合问题的训练
利用paddlepaddle建立神经网络,模拟有限个数据的非线性拟合 本文仍然考虑 f ( x ) sin ( x ) x f(x)\frac{\sin(x)}{x} f(x)xsin(x) 函数在区间 [-10,10] 上固定数据的拟合。 import paddle import paddle.nn as nn import numpy as np import matplotlib.…...
Vue2: table加载树形数据的踩坑记录
table中需要加载树形数据,如图: 官网给了两个例子,且每个例子中的tree-props都是这么写的: :tree-props="{children: children, hasChildren: hasChildren}" 给我一种错觉,以为数据结构中要同时指定children和hasChildren字段,然而,在非懒加载模式下,数据结…...