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

设计模式:简单工厂模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):

简介:

简单工厂模式,它提供了一个用于创建对象的接口,但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象,并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。
在简单工厂模式中,有一个专门的类负责创建其他类的实例,这个类称为工厂类。被创建的实例通常都具有共同的父类。工厂类中有一个用于创建对象的静态工厂方法,系统可以根据该方法所传入的参数来动态决定应该创建出哪一个产品类的实例。
以汽车生产为例,简单工厂模式可以模拟该生产过程。我们将汽车抽象为一个产品接口,不同品牌的汽车则具体实现该接口并提供各自的功能。工厂类负责根据传入的品牌参数来创建相应的汽车对象。


以下是简单工厂模式的步骤:
1、定义产品接口:首先定义一个产品接口,例如“汽车”,它包含一些公共的方法,如“启动”、“刹车”等。
2、实现具体产品类:针对不同的品牌,创建具体的实现类来实现产品接口。例如,“奔驰”和“宝马”都实现了“汽车”接口,并提供了各自特有的功能。
3、创建工厂类:创建一个工厂类,它包含一个静态工厂方法,用于根据传入的品牌参数来创建相应的汽车对象。例如,在“奔驰”工厂中,我们创建了一个静态方法“createCar”,它根据传入的品牌来实例化相应的汽车对象。
4、使用工厂类创建产品对象:客户端代码直接调用工厂类的静态工厂方法来创建需要的汽车对象,而无需关心具体的品牌和创建细节。例如,我们调用“奔驰”工厂的“createCar”方法,并传入型号参数“E-260-L”,即可得到一个奔驰E260L对象。
简单工厂模式的优点:它能将对象的创建和对象本身业务处理分离,降低系统的耦合度,使得两者修改起来都相对容易。同时,由于工厂方法是静态方法,使用起来很方便,只需通过工厂类类名直接调用即可,无需了解对象的创建细节。它可以在不修改客户端代码的情况下扩展新的产品类型,因为新产品只需实现抽象产品接口,并在工厂类中添加相应的创建逻辑即可。而不需要修改其它已经存在的代码,这样就保持了良好的封装性。
简单工厂模式的缺点:如果Shape类型的数量很多,那么ShapeFactory类就会变得很庞大,而且所有创建对象的逻辑都集中在一个类中,破坏了代码的模块化,破坏了“开闭原则”。

示例:

一、C#简单工厂模式

以下是一个示例,展示了如何在C#中实现简单工厂模式:

// 接口  
public interface Shape  
{  void Draw();  
}  // 实现接口的实体类  
public class Circle : Shape  
{  public void Draw()  {  Console.WriteLine("绘制一个圆形");  }  
}  public class Rectangle : Shape  
{  public void Draw()  {  Console.WriteLine("绘制一个矩形");  }  
}  // 工厂类,创建实体类的对象  
public class ShapeFactory  
{  // 通过GetShape方法来根据传入的字符串来返回相应的Shape类型的对象  public Shape GetShape(string type)  {  if (type == "Circle")  {  return new Circle();  }  else if (type == "Rectangle")  {  return new Rectangle();  }  else  {  throw new ArgumentException("无效的图形类型");  }  }  
}
//使用这个工厂,你可以在运行时决定创建哪种类型的 Shape。例如:
class FactoryPatternDemo
{static void Main(string[] args){ShapeFactory shapeFactory = new ShapeFactory();  Shape shape1 = shapeFactory.GetShape("Circle");  shape1.Draw();  // 输出"绘制一个圆形"  Shape shape2 = shapeFactory.GetShape("Rectangle");  shape2.Draw();  // 输出"绘制一个矩形"  }  
}

二、java简单工厂模式

以下是一个示例,展示了如何在Java中实现简单工厂模式:

// 接口  
public interface Shape {  void draw();  
}  
// 实现接口的实体类  
public class Circle implements Shape {  @Override  public void draw() {  System.out.println("绘制一个圆形");  }  
}  public class Rectangle implements Shape {  @Override  public void draw() {  System.out.println("绘制一个矩形");  }  
}
// 工厂类,创建实体类的对象 
public class ShapeFactory {  // 通过getShape方法来根据传入的字符串来返回相应的Shape类型的对象  public Shape getShape(String type) {  if (type.equalsIgnoreCase("CIRCLE")) {  return new Circle();  } else if (type.equalsIgnoreCase("RECTANGLE")) {  return new Rectangle();  } else {  throw new IllegalArgumentException("无效的形状类型");  }  }  
}
//然后我们就可以这样使用这个工厂类创建Shape对象:
public class FactoryPatternDemo {  public static void main(String[] args) {  ShapeFactory shapeFactory = new ShapeFactory();  Shape shape1 = shapeFactory.getShape("CIRCLE");  shape1.draw();  // 输出"绘制一个圆形"  Shape shape2 = shapeFactory.getShape("RECTANGLE");  shape2.draw();  // 输出"绘制一个矩形"  }  
}


三、javascript简单工厂模式

在JavaScript 中,它使用一个共同的接口来实例化不同类型的对象,而无需直接使用具体类。在工厂模式中,您可以创建一个工厂类来负责创建对象,而无需暴露创建逻辑。
以下是一个示例,展示了如何在JavaScript中实现简单工厂模式:

// Car 接口  
class Car {  constructor(name) {  this.name = name;  }  start() {  console.log(this.name + ' started');  }  stop() {  console.log(this.name + ' stopped');  }  
}  // CarFactory 工厂类  
class CarFactory {  constructor() {  this.cars = {};  }  // 创建轿车对象  createCar(name, type='Sedan') {  if (!this.cars[type]) {  this.cars[type] = new Car(type);  }  return this.cars[type];  }  // 创建卡车对象  createTruck(name, type='Pickup') {  if (!this.cars[type]) {  this.cars[type] = new Car(type);  }  return this.cars[type];  }  
}
//接下来,我们使用 CarFactory 工厂类来制造不同类型的汽车:
// 创建 CarFactory 实例  
const carFactory = new CarFactory();  // 制造轿车  
const sedan = carFactory.createCar('Alice', 'Sedan');  
sedan.start(); // 输出 "Sedan started"  
sedan.stop(); // 输出 "Sedan stopped"  // 制造卡车  
const truck = carFactory.createCar('Bob', 'Truck');  
truck.start(); // 输出 "Pickup started"  
truck.stop(); // 输出 "Pickup stopped"

四、C++简单工厂模式

在C++中,可以通过以下步骤来实现简单工厂模式:
1、定义一个抽象基类(或接口),其中包含所有派生类的公共方法。这个抽象基类可以看作是工厂的公共接口,它不知道具体对象的类型。
2、创建多个派生类,这些派生类实现了抽象基类中的所有公共方法,每个派生类具有不同的状态和行为。
3、创建一个工厂类,它包含一个用于创建对象的纯虚函数。这个纯虚函数根据传入的参数类型来创建相应的派生类对象,并返回该对象的指针。
4、在客户端代码中,通过调用工厂类的纯虚函数来创建对象。由于客户端代码不知道具体对象的类型,因此可以使用抽象基类的指针来操作这些对象。
以下是一个示例,展示了如何在C++中实现简单工厂模式:

#include <iostream>  // 抽象基类  
class Shape {  
public:  virtual void draw() = 0;  
};  // 圆形派生类  
class Circle : public Shape {  
public:  void draw() override {  std::cout << "绘制圆形" << std::endl;  }  
};  // 矩形派生类  
class Rectangle : public Shape {  
public:  void draw() override {  std::cout << "绘制矩形" << std::endl;  }  
};  // 工厂类  
class ShapeFactory {  
public:  // 根据传入的参数类型来创建相应的对象,并返回该对象的指针  static Shape* createShape(const std::string& type) {  if (type == "Circle") {  return new Circle();  } else if (type == "Rectangle") {  return new Rectangle();  } else {  throw std::invalid_argument("无效的形状类型");  }  }  
};  int main() {  // 创建圆形对象  Shape* circle = ShapeFactory::createShape("Circle");  circle->draw(); // 输出"绘制圆形"  delete circle;  // 创建矩形对象  Shape* rectangle = ShapeFactory::createShape("Rectangle");  rectangle->draw(); // 输出"绘制矩形"  delete rectangle;  return 0;  
}

五、python简单工厂模式

在Python中,工厂模式通常是通过函数或类来创建其他类的实例。简单工厂模式是一种常见的工厂模式,它通过一个单独的工厂类来创建产品对象,这个工厂类一般用来创建与环境有关的具体产品。
下面是一个Python中简单工厂模式的例子:

class Product(object):  def operation(self):  pass  class ConcreteProduct1(Product):  def operation(self):  return "ConcreteProduct1 operation"  class ConcreteProduct2(Product):  def operation(self):  return "ConcreteProduct2 operation"  class Factory:  @staticmethod  def create_product(product_type):  if product_type == "type1":  return ConcreteProduct1()  elif product_type == "type2":  return ConcreteProduct2()  else:  return None  def client_code(factory=Factory):  product = factory.create_product("type1")  print(product.operation())  if __name__ == "__main__":  client_code()

    
六、Go简单工厂模式

以下是一个示例,展示了如何在go中实现简单工厂模式:

// 抽象产品接口  
interface Product {  void use();  
}  // 具体产品类1  
class ConcreteProduct1 implements Product {  public void use() {  System.out.println("使用具体产品1");  }  
}  // 具体产品类2  
class ConcreteProduct2 implements Product {  public void use() {  System.out.println("使用具体产品2");  }  
}  // 工厂类  
class Factory {  public Product createProduct(String type) {  if (type.equals("product1")) {  return new ConcreteProduct1();  } else if (type.equals("product2")) {  return new ConcreteProduct2();  } else {  throw new IllegalArgumentException("无效的产品类型");  }  }  
}  // 客户端代码  
public class Client {  public static void main(String[] args) {  Factory factory = new Factory();  Product product1 = factory.createProduct("product1");  product1.use(); // 输出:使用具体产品1  Product product2 = factory.createProduct("product2");  product2.use(); // 输出:使用具体产品2  }  
}


七、PHP简单工厂模式

以下是一个示例,展示了如何在PHP中实现简单工厂模式:

<?php  // 产品接口  
interface Product {  public function useProduct();  
}  // 具体产品类 1  
class ConcreteProduct1 implements Product {  public function useProduct() {  echo "使用具体产品1\n";  }  
}  // 具体产品类 2  
class ConcreteProduct2 implements Product {  public function useProduct() {  echo "使用具体产品2\n";  }  
}  // 工厂类  
class Factory {  public static function createProduct($type) {  if ($type === 'product1') {  return new ConcreteProduct1();  } elseif ($type === 'product2') {  return new ConcreteProduct2();  } else {  throw new Exception('无效的产品类型');  }  }  
}  // 客户端代码  
function clientCode() {  $product1 = Factory::createProduct('product1');  $product1->useProduct(); // 输出:使用具体产品1  $product2 = Factory::createProduct('product2');  $product2->useProduct(); // 输出:使用具体产品2  
}  // 调用客户端代码  
clientCode();  
?>

《完结》

相关文章:

设计模式:简单工厂模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):

简介&#xff1a; 简单工厂模式&#xff0c;它提供了一个用于创建对象的接口&#xff0c;但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象&#xff0c;并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。 在简单工厂模式中&am…...

浅谈智能照明控制系统在智慧建筑中的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;新时期&#xff0c;建筑行业发展迅速&#xff0c;在信息化背景下&#xff0c;建筑功能逐渐拓展&#xff0c;呈现了智能化的发展态势。智能建筑更加安全、节能、环保&#xff0c;也符合绿色建筑理念。在建筑智…...

lower_bound()以及upper_bound()

lower_bound&#xff08;&#xff09;&#xff1a; lower_bound()的返回值是第一个大于等于 target 的值的地址&#xff0c;用这个地址减去first&#xff0c;得到的就是第一个大于等于target的值的下标。 在数组中&#xff1a; int poslower_bound(a,an,target)-a;\\n为数组…...

unity(WebGL) 截图拼接并保存本地,下载PDF

截图参考&#xff1a;Unity3D 局部截图、全屏截图、带UI截图三种方法_unity 截图_野区捕龙为宠的博客-CSDN博客 文档下载&#xff1a; Unity WebGL 生成doc保存到本地电脑_unity webgl 保存文件_野区捕龙为宠的博客-CSDN博客 中文输入&#xff1a;Unity WebGL中文输入 支持输…...

加速企业云计算部署:应对新时代的挑战

随着科技的飞速发展&#xff0c;企业面临着诸多挑战。在这个高度互联的世界中&#xff0c;企业的成功与否常常取决于其能否快速、有效地响应市场的变化。云计算作为一种新兴的技术趋势&#xff0c;为企业提供了实现这一目标的可能。通过加速企业云计算部署&#xff0c;企业可以…...

ubuntu 18.04 LTS交叉编译opencv 3.4.16并编译工程[全记录]

一、下载并解压opencv 3.4.16源码 https://opencv.org/releases/ 放到home路径下的Exe文件夹&#xff08;专门放用户安装的软件&#xff09;中&#xff0c;其中build是后期自建的 为了版本控制&#xff0c;保留了3.4.16&#xff0c;并增加了-gcc-arm 二、安装cmake和cmake-g…...

禁用和开启笔记本电脑的键盘功能,最快的方式

笔记本键盘通常较小&#xff0c;按键很不方便&#xff0c;当我们外接了键盘时就不需要再使用自带的键盘了&#xff0c;而且午睡的时候&#xff0c;总是担心碰到笔记本的键盘&#xff0c;可能会删掉我们的代码什么的&#xff0c;所以就想着怎么禁用掉&#xff0c;下面是操作步骤…...

【单片机基础】使用51单片机制作函数信号发生器(DAC0832使用仿真)

文章目录 &#xff08;1&#xff09;DA转换&#xff08;2&#xff09;DAC0832简介&#xff08;3&#xff09;电路设计&#xff08;4&#xff09;参考例程&#xff08;5&#xff09;参考文献 &#xff08;1&#xff09;DA转换 单片机作为一个数字电路系统&#xff0c;当需要采集…...

springcloud组件

https://www.bilibili.com/video/BV1QX4y1t7v5?p32&vd_source297c866c71fa77b161812ad631ea2c25 eureka : 主要是收集服务的注册信息。 如果有了eureka启动了。内部之前的调用其实就可以用服务名了&#xff0c; 本来是要是用ip端口来访问的&#xff0c;只要eureka启来了…...

手机爬虫用Appium详细教程:利用Python控制移动App进行自动化抓取数据

Appium是一个强大的跨平台工具&#xff0c;它可以让你使用Python来控制移动App进行自动化操作&#xff0c;从而实现数据的抓取和处理。今天&#xff0c;我将与大家分享一份关于使用Appium进行手机爬虫的详细教程&#xff0c;让我们一起来探索Appium的功能和操作&#xff0c;为手…...

deb包构建详解

deb包构建详解 一、deb包构建流程二、deb包构建描述文件详解2.1 control文件2.2 postinst 文件 (post-installation script)2.3 postrm 文件 (post-removal script)2.4 prerm 文件 (pre-removal script)2.5 preinst 文件 (pre-installation script)2.6 rules 文件2.7 changelog…...

【Spring Cloud】网关Gateway的请求过滤工厂RequestRateLimiterGatewayFilterFactory

概念 关于微服务网关Gateway中有几十种过滤工厂&#xff0c;这一篇博文记录的是关于请求限流过滤工厂&#xff0c;也就是标题中的RequestRateLimiterGatewayFilterFactory。这个路由过滤工厂是用来判断当前请求是否应该被处理&#xff0c;如果不会被处理就会返回HTTP状态码为42…...

自己写spring boot starter问题总结

1. Unable to find main class 创建spring boot项目写自己的starterxi写完之后使用install出现Unable to find main class&#xff0c;这是因为spring boot打包需要一个启动类&#xff0c;按照以下写法就没事 <plugins><plugin><groupId>org.springframewo…...

vue3如何打开页面即向后端发送请求

目录 背景&#xff1a; 实现&#xff1a; 1、使用 2、案例 补充&#xff1a; 1、如何定义一个集合来接受后端返回的list 2、加入请求头 背景&#xff1a; 如果想在页面刚加载时向后端发送请求&#xff0c;可以使用Vue 3的生命周期钩子函数onMounted来实现 实现&#xff…...

【软考】9.2 串/数组/矩阵/广义表/树

《字符串》 一种特殊的线性表&#xff0c;数据元素都为字符模式匹配&#xff1a;寻找子串第一次在主串出现的位置 模式匹配算法 1. 暴力破解法&#xff08;布鲁特-福斯算法&#xff09; 主串与子串一个个匹配效率低 2. KMP算法 主串后缀和子串前缀能否找到一样的元素&#xf…...

大数据 DataX 数据同步数据分析入门

目录 一、DataX 概览 1.1 DataX 是什么 1.2 DataX 3.0 概览 设计理念 当前使用现状 二、DataX 详解 2.1 DataX 3.0 框架设计 2.2 DataX 3.0 插件体系 2.3 DataX 3.0 核心架构 2.3.1 核心模块介绍 2.3.2 DataX 调度流程 2.4 DataX 3.0 的六大核心优势 2.4.1 可靠的…...

【京东开源项目】微前端框架MicroApp 1.0正式发布

介绍 MicroApp是由京东前端团队推出的一款微前端框架&#xff0c;它从组件化的思维&#xff0c;基于类WebComponent进行微前端的渲染&#xff0c;旨在降低上手难度、提升工作效率。MicroApp无关技术栈&#xff0c;也不和业务绑定&#xff0c;可以用于任何前端框架。 源码地址…...

多个子div在父中垂直居中

在一个div下&#xff0c;有多个子div&#xff0c;且子div都是水平垂直居中 <template><div><div class"far"><!-- 注意需要多包裹一层 --><div><div class"son1">1</div><div class"son2">222…...

[C国演义] 第十五章

第十五章 最长湍流子数组环绕字符串中唯⼀的⼦字符串 最长湍流子数组 力扣链接 子数组 ⇒ dp[i]的含义: 以arr[i] 结尾的所有子数组中的最长湍流子数组的长度 子数组 ⇒ 状态转移方程根据 最后一个位置来划分&#x1f447;&#x1f447;&#x1f447; 初始化: 都初始化为…...

Docker Compose和Consul

目录 Docker-compose Docker-compose 简介 YAML 文件格式及编写注意事项 Docker Compose配置常用字段 Docker Compose 常用命令 Docker Compose 文件结构 compose 部署 Docker Compose 环境安装 准备依赖文件 编写配置文件docker-compose.yml Consul consul 部署 c…...

Wireshark新手小白基础使用方法

一、针对IP抓取 1、过滤格式&#xff1a; &#xff08;1&#xff09;、ip.src eq x.x.x.x &#xff08;2&#xff09;、ip.dst eq x.x.x.x &#xff08;3&#xff09;ip.src eq x.x.x.x or ip.dst eq x.x.x.x 二、针对端口过滤 1、过滤格式&#xff1a; &#xff08;1&a…...

互动设计:深入了解用户体验的关键

交互是人与计算机系统之间的互动过程。在计算机领域中&#xff0c;交互是人机交互技术的核心内容之一。交互设计是一种基于人类行为科学、心理学、人体工程学等领域的专业设计&#xff0c;目的是创造用户友好的、易于使用的计算机软件、网络、移动应用等。交互的本质在于用户的…...

maven的坐标元素

maven的坐标&#xff1a;使用三个向量在Maven仓库中唯一的定位到一个jar包 * groupId&#xff1a;公司或组织的ID * artifactId&#xff1a;一个项目或者是项目中的一个模块的ID * version&#xff1a;版本号 <groupId>com.gz.maven</groupId> <artifactId&…...

蓝桥杯 题库 简单 每日十题 day13

01 乘积尾零 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将 所填结果输出即可。如下的10行数据&#xff0c;每行有10个整数&#xff0c;请你求出它们的乘积的末尾有多少个零&#xff1f; 5650 4542 3554 473 946 4114 3871 9073 90 …...

联想G50笔记本直接使用F键功能(F1~F12)需要在BIOS设置关闭热键功能可以这样操作!

如果开启启用热键模式按F1就会出现FnF1的效果&#xff0c;不喜欢此方式按键的用户可以进入BIOS设置界面停用热键模式即可。 停用热键模式方法如下&#xff1a; 1、重新启动笔记本电脑&#xff0c;当笔记本电脑屏幕出现Lenovo标识的时候&#xff0c;立即按FnF2进入BIOS设置界面…...

C++入门(头文件,命名空间,作用域,输入输出流,引用,缺省参数,函数重载)

目录 一&#xff0c;头文件 二,命名空间 三&#xff0c;作用域 四&#xff0c;输入输出流 五&#xff1a;引用 六&#xff0c;缺省参数 七&#xff0c;函数重载 一&#xff0c;头文件 C的头文件与C是有差距的&#xff0c;C的头文件是#include<stdio.h>,而C是#inc…...

“Linux免除系统交互操作方法、expect自动化交互工具” 及 “SSH批量修改主机密码脚本”

一、Linux系统免除交互操作方法 1、EOF多文本输入 案例&#xff1a;为机器磁盘进行分区并实现挂载&#xff0c;免交互式操作&#xff0c;如何实现&#xff1f; #!/bin/bash fdisk /dev/sdb <<EOF n p 1 wq EOFmkfs.xfs /dev/sdb1 && mkdir -p /data &&am…...

三相异步电机动态数学模型及矢量控制仿真

三相异步电机动态数学模型及矢量控制仿真 本文带你一步步推倒三相异步电机动态数学模型&#xff0c;按基于转子磁链定向的矢量控制进行 matlab 仿真&#xff0c;实现较好的控制效果。 1、异步电机三相方程 2、坐标变换 3、磁链3/2变换推导 4、两相静止坐标系下的方程 5、…...

HTML5 新增表单标签

HTML5为表单添加了一些新的语义化标签&#xff0c;可以更好地描述表单内容和功能。下面是新增的表单标签及其功能&#xff1a; <datalist>标签&#xff1a;用于定义一个选项列表&#xff0c;供用户选择或输入。 <output>标签&#xff1a;用于显示表单提交后的结果…...

【版本控制】Git(学习笔记)

一、Git工作流程图 clone&#xff08;克隆&#xff09;: 从远程仓库中克隆代码到本地仓库checkout &#xff08;检出&#xff09;&#xff1a;从本地仓库中检出一个仓库分支然后进行修订add&#xff08;添加&#xff09;: 在提交前先将代码提交到暂存区commit&#xff08;提交&…...

什么是自适应网站/东莞网站快速排名提升

将数据&#xff08;如音频、视频、文本&#xff09;变为图像结构&#xff0c;然后进行处理 输入二维像素&#xff0c;输出是 即使输入数据是经过旋转、缩放等处理的&#xff0c;输出仍然可以正确识别并进行输出 feature map 颜色越深&#xff0c;值越低 卷积核 如果卷积核形状与…...

wordpress结构化标签/拉新推广赚钱的app

目录 1. asyncio 简介 1.1 协程与 asyncio协程编写的三个组成部分&#xff1a;1. 事件循环&#xff0c; 2. 回调(驱动生成器)&#xff0c; 3. epoll&#xff08;IO 多路复用&#xff09; asyncio 是 python 用于解决异步 IO 编程的一整套解决方案。基于 asyncio 的框架有: torn…...

国外网站怎么打开/高端网站建设公司排名

4其他需要注意的事项如果您在清单文件AndroidManifest.xml中&#xff0c;有那种以包名开头命名的那种。因为如果包名都改了&#xff0c;有些也需要动态的改变。可以用${applicationId}代替。在打包的时候&#xff0c;会自动替换成当前包名。比如&#xff0c;类似下配置&#xf…...

个人作品集网站模板免费下载/荨麻疹怎么治疗能除根

https://blog.csdn.net/github_37512301/article/details/75675054 一、关联模型在关系型数据库中&#xff0c;表之间有一对一、一对多、多对多的关系。在 TP5 中&#xff0c;实现了ORM (Object Relational Mapping) 的思想&#xff0c;通过在模型中建立模型间的关联&#xff0…...

wordpress主题简约博客/培训课程网站

描述&#xff1a; 实现 LFUCache 类&#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象 int get(int key) - 如果键存在于缓存中&#xff0c;则获取键的值&#xff0c;否则返回 -1。 void put(int key, int value) - 如果键已存在&#xff0c;则变更…...

手机网站建设软件有哪些/cps广告联盟

ps:个人学习笔记&#xff0c;视频链接https://www.bilibili.com/video/BV1Y7411d7Ys 参考链接https://blog.csdn.net/bit452/category_10569531.html 文章目录相关知识点线性模型梯度下降1.梯度下降2.随机梯度下降反向传播1.两层神经网络示例2.反向传播计算损失函数对权重偏导P…...