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

策略模式(strategy)

一.策略模式是什么

策略模式是一种行为型对象模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。这样,算法可以独立于使用它的客户端而变化‌‌。

策略者模式的核心思想是将一系列的算法封装到一系列的策略类里,作为一个抽象策略类的子类。具体策略角色包装了相关的算法或行为,而环境角色持有一个策略类的引用,这样可以在不影响到客户端的情况下更换算法‌。

策略者模式的优点在于它使得算法可以在不影响到客户端的情况下发生变化。通过将算法封装到独立的类中,并使它们具有共同的接口,策略者模式允许在运行时选择不同的算法实现,从而提高了程序的灵活性和可扩展性‌

二.类图

三.实例

示例一:

商场打折,一共有两种策略,满300打8折,满400打7折。UML图如下

Buy.java

package 策略模式;public class Buy {private Discount discount=new Discount();private double cost;Buy(double cost){this.cost=cost;	}double getcost() {return cost;}Discount getdiscount() {return discount;}
}

Discount.java

package 策略模式;public class Discount {
protected double discountpercent;
protected double discountprice;
void dodiscount(double originalprice) {if(originalprice>400.00) {new stratage1(originalprice);}else if(originalprice>300.00) {new stratege2(originalprice);}else {new stratege3(originalprice);}}
void setdisp(double discountpercent) {this.discountpercent=discountpercent;
}
void print(){};
}

Stratege1.java

package 策略模式;public class stratage1 extends Discount{stratage1(double originalprice){print();setdisp(0.7);discountprice=originalprice*discountpercent;System.out.printf("原来的价格是:");System.out.println(originalprice);System.out.printf("打完折后的价格是:");System.out.println(discountprice);}void print() {// TODO Auto-generated method stubSystem.out.println("因为购物的价格在400元以上,打7折");}}

Stratege2.java

package 策略模式;public class stratege2 extends Discount{stratege2(double originalprice){print();setdisp(0.8);discountprice=originalprice*discountpercent;System.out.printf("原来的价格是:");System.out.println(originalprice);System.out.printf("打完折后的价格是:");System.out.println(discountprice);}@Overridevoid print() {// TODO Auto-generated method stubSystem.out.printf("因为商品价格介于300到400之间,打8折");}
}

Stratege3.java

package 策略模式;public class stratege3 extends Discount{stratege3(double originalprice){print();setdisp(1);discountprice=originalprice*discountpercent;System.out.printf("原来的价格是:");System.out.println(originalprice);System.out.printf("打完折后的价格是:");System.out.println(discountprice);}@Overridevoid print() {// TODO Auto-generated method stubSystem.out.printf("因为商品的价格小于300元,所以不打折\n");}
}

A.java(主函数)

package 策略模式;public class A {public static void main(String[] args) {Buy buy1=new Buy(7.0);buy1.getdiscount().dodiscount(buy1.getcost());Buy buy2=new Buy(360.0);buy2.getdiscount().dodiscount(buy2.getcost());Buy buy3=new Buy(800.0);buy3.getdiscount().dodiscount(buy3.getcost());
}
}

运行结果:

例二.

猜拳,剪刀石头布。一共有两种策略模式,一种是根据这一局的猜拳结果来计算下一局的出拳手势概率(probstrategy),另一种是这局赢了就保持不变,下局还是这个手势,如果输了,就随机出拳(winstrategy)。

Hand.java

package 策略模式2;public class Hand {public static final int HANDVALUE_GUU=0;public static final int HANDVALUE_COH=1;public static final int HANDVALUE_PAA=2;public static final Hand[] hand={new Hand(HANDVALUE_GUU),new Hand(HANDVALUE_COH),new Hand(HANDVALUE_PAA),};private static final String[] name={"石头","剪刀","布",
};
private int handvalue;
public Hand(int handvalue) {this.handvalue=handvalue;
}
public static Hand getHand(int handvalue){return hand[handvalue];
}
public boolean isStrongerthan(Hand h) {return fight(h)==1;
}
public boolean isWeakerthan(Hand h) {return fight(h)==-1;
}
private int fight(Hand h) {if(this==h) {return 0;}else if((this.handvalue+1)%3==h.handvalue) {return 1;}else return -1;
}
public String toString() {return name[handvalue];
}
}

Player.java

package 策略模式2;
public class Player {private String name;private Strategy strategy;private int wincount;private int losecount;private int gamecount;public Player(String name,Strategy strategy) {this.name=name;this.strategy=strategy;}public Hand nexthand() {return strategy.nexthand();}public void win() {strategy.study(true);wincount++;gamecount++;}public void lose() {strategy.study(false);losecount++;gamecount++;}	public void even() {gamecount++;}public String tostring() {return "["+name+":"+gamecount+"games,"+wincount+"win,"+losecount+"lose."+"]";}
}

probstrategy.java

package 策略模式2;
import java.util.Random;
public class Probstrategy implements Strategy {private Random random;private int prevhandvalue=0;private int currenthandvalue=0;private int [][]history= {{1,1,1},{1,1,1},{1,1,1},};public Probstrategy(int seed) {random=new Random(seed);}@Overridepublic Hand nexthand() {// TODO Auto-generated method stubint bet=random.nextInt(getSum(currenthandvalue));return new Hand(bet);}private int getSum(int hv) {// TODO Auto-generated method stubint sum=0;for(int i=0;i<3;i++) {sum+=history[hv][i];}return sum;}@Overridepublic void study(boolean win) {// TODO Auto-generated method stubif(win) {history[prevhandvalue][currenthandvalue]++;}else {history[prevhandvalue][(currenthandvalue+1)%3]++;history[prevhandvalue][(currenthandvalue+2)%3]++;}}}

winstrategy.java

package 策略模式2;
import java.util.Random;
public class Winningstrategy implements Strategy {private Random random;
private boolean won=false;
private Hand prevhand;
public Winningstrategy(int seed) {random=new Random(seed);
}
public Hand nexthand() {if(!won) {prevhand=Hand.getHand(random.nextInt(3));}return prevhand;
}
@Override
public void study(boolean win) {// TODO Auto-generated method stubwon=win;
}
}

strategy.java

package 策略模式2;public interface Strategy {
public abstract Hand nexthand();
public abstract void study(boolean win);
}

Main.java

package 策略模式2;public class Main {public static void main(String[] args) {if(args.length!=2) {System.out.println("Usage java main randomseed1 randomseed2");System.out.println("Example :java Main 314 15");System.exit(0);}int seed1=Integer.parseInt(args[0]);int seed2=Integer.parseInt(args[1]);
Player player1=new Player("haha",new Winningstrategy(seed1));
Player player2=new Player("xixi",new Probstrategy(seed2));
for(int i=0;i<1000;i++) {Hand nexthand1=player1.nexthand();Hand nexthand2=player2.nexthand();
if(nexthand1.isStrongerthan(nexthand2)) {System.out.println("winner:"+player1);player1.win();player2.lose();
}else if(nexthand2.isStrongerthan(nexthand1)){System.out.println("winner:"+player2);player2.win();player1.lose();
}
else {System.out.println("even");player1.even();player2.even();
}
}
System.out.println("total resaults:");
System.out.println(player1.tostring());
System.out.println(player2.tostring());}
}

运行结果:

习题练习

习题10-1解析:

Random.java

package 策略模式2;
import java.util.Random;
public class RadomStrategy implements Strategy{private Random random;public RadomStrategy(int seed) {random=new Random(seed);}@Overridepublic Hand nexthand() {return Hand.getHand(random.nextInt(3));}@Overridepublic void study(boolean win) {// TODO Auto-generated method stub}}

Main.java

package 策略模式2;public class Main {public static void main(String[] args) {if(args.length!=3) {System.out.println("Usage java main randomseed1 randomseed2");System.out.println("Example :java Main 314 15 9");System.exit(0);}int seed1=Integer.parseInt(args[0]);int seed2=Integer.parseInt(args[1]);int seed3=Integer.parseInt(args[2]);
Player player1=new Player("haha",new Winningstrategy(seed1));
Player player2=new Player("xixi",new Probstrategy(seed2));
Player player3=new Player("hehe",new RadomStrategy(seed3));
for(int i=0;i<1000;i++) {Hand nexthand1=player1.nexthand();Hand nexthand2=player2.nexthand();
if(nexthand1.isStrongerthan(nexthand2)) {System.out.println("winner:"+player1);player1.win();player3.lose();
}else if(nexthand2.isStrongerthan(nexthand1)){System.out.println("winner:"+player2);player3.win();player1.lose();
}
else {System.out.println("even");player1.even();player3.even();
}
}
System.out.println("total resaults:");
System.out.println(player1.tostring());
System.out.println(player3.tostring());}
}

运行结果:

10-2解析:

10-3解析:

10-4解析:

Main.java


public class Main {
public static void main(String[] args) {String[] data= {"Dumpty","Baba","Coco","Apple","Elements"};SortAndPrint sap=new SortAndPrint(data,new SelectionSorter());sap.execute();
}
}

SortAndPrint.java


public class SortAndPrint {
Comparable[]data;
Sorter sorter;
public SortAndPrint(Comparable[] data,Sorter sorter) {this.data=data;this.sorter=sorter;
}
public void execute() {print();sorter.sort(data);print();
}
public void print() {for(int i=0;i<data.length;i++) {System.out.print(data[i]+",");}System.out.println("");
}
}

SelectionSorter.java(简单选择排序)


public class SelectionSorter implements Sorter {@Overridepublic void sort(Comparable[] data) {// TODO Auto-generated method stubfor(int i=0;i<data.length-1;i++) {int min=i;for(int j=i+1;j<data.length;j++) {if(data[min].compareTo(data[j])>0) {min=j;}}Comparable passingplace=data[min];data[min]=data[i];data[i]=passingplace;}}}

Sorter.java

import java.lang.Comparable;
public interface Sorter {
public abstract void sort(Comparable[] data);
}

运行结果:

增加一个快速排序

Main.java


public class Main {
public static void main(String[] args) {String[] data= {"Dumpty","Baba","Coco","Apple","Elements"};SortAndPrint sap=new SortAndPrint(data,new SelectionSorter());SortAndPrint qsort=new SortAndPrint(data,new QuickSorter());
//	sap.execute();System.out.println("快速排序");qsort.execute();
}
}

QuickSorter.java


public class QuickSorter implements Sorter{
Comparable[] data;@Overridepublic void sort(Comparable[] data) {// TODO Auto-generated method stubthis.data=data;qsort(0,data.length-1);}private void qsort(int pre, int post) {// TODO Auto-generated method stubint saved_pre=pre;int saved_post=post;Comparable mid=data[(pre+post)/2];do {while(data[pre].compareTo(mid)<0) {pre++;}while(mid.compareTo(data[post])<0) {post--;}if(pre<=post) {Comparable tmp=data[pre];data[pre]=data[post];data[post]=tmp;pre++;post--;}}while(pre<=post);if(saved_pre<post) {qsort(saved_pre,post);}if(pre<saved_post) {qsort(pre,saved_post);}}}

运行结果:

相关文章:

策略模式(strategy)

一.策略模式是什么 策略模式是一种行为型对象模式&#xff0c;它定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以相互替换。这样&#xff0c;算法可以独立于使用它的客户端而变化‌‌。 策略者模式的核心思想是将一系列的算法封装到一系列的策略类里…...

Centos源码安装MariaDB 基于GTID主从部署(一遍过)

MariaDB安装 安装依赖 yum install cmake ncurses ncurses-devel bison 下载源码 // 下载源码 wget https://downloads.mariadb.org/interstitial/mariadb-10.6.20/source/mariadb-10.6.20.tar.gz // 解压源码 tar xzvf mariadb-10.5.9.tar.gz 编译安装 cmake -DCMAKE_INSTA…...

如何在 VSCode 中配置 C++ 开发环境:详细教程

如何在 VSCode 中配置 C 开发环境&#xff1a;详细教程 在软件开发的过程中&#xff0c;选择一个合适的开发环境是非常重要的。Visual Studio Code&#xff08;VSCode&#xff09;作为一款轻量级的代码编辑器&#xff0c;凭借其强大的扩展性和灵活性&#xff0c;受到许多开发者…...

信息安全、网络安全和数据安全的区别和联系

1. 前言 有次有朋友问我 信息安全、网络安全和数据安全&#xff0c;这三个词平时写文档时怎么用&#xff1f; 我想很多人都说不清。这次我查阅了资料&#xff0c;尽量讲清楚这三者之间的区别和联系。 2. 信息安全 2.1 定义 信息安全是指为数据处理系统建立和采用的技术和管…...

路由组件与一般组件的区别

路由组件与一般组件的区别 1. 基本概念 1.1 路由组件 路由组件是指通过路由规则映射的组件&#xff0c;通常放在 pages 或 views 文件夹中。 1.2 一般组件 一般组件是指通过 import 导入后直接使用的组件&#xff0c;通常放在 components 文件夹中。 2. 主要区别 2.1 存…...

【微服务】4、服务保护

微服务架构与组件介绍 单体架构拆分&#xff1a;黑马商城早期为单体架构&#xff0c;后拆分为微服务架构。跨服务调用与组件使用 服务拆分后存在跨服务远程调用&#xff0c;如下单需查询商品信息&#xff0c;使用openfeign组件解决。服务间调用关系复杂&#xff0c;需维护服务…...

6_TypeScript 函数 --[深入浅出 TypeScript 测试]

在 TypeScript 中&#xff0c;函数是编程的核心组成部分之一。TypeScript 不仅继承了 JavaScript 的所有函数特性&#xff0c;还添加了静态类型检查和其他一些增强功能&#xff0c;使得函数更加安全和易于理解。以下是关于 TypeScript 函数的一些关键点和两个具体的示例&#x…...

Apifox=Postman+Swagger+Jmeter+Mock

A. 开发人员接口管理使用(Swagger 工具管理接口) B. 后端开发人员通过Postman 工具&#xff0c;一边开发一边测试 C. 前端开发人员需要Mock 工具提供前端调用 D. 测试人员通过(Postman、Jmeter)等工具进行接口测试 为了后台开发、前端开发、测试工程师等不同角色更加便捷管理…...

升级 Spring Boot 3 配置讲解 —— Spring Boot 3 核心源码专讲

学会这款 &#x1f525;全新设计的 Java 脚手架 &#xff0c;从此面试不再怕&#xff01; Spring Boot 3 是 Spring 生态中的重要里程碑&#xff0c;它不仅全面支持 Java 17&#xff0c;还引入了许多新特性&#xff0c;如对 GraalVM 原生镜像的支持、改进的性能优化以及更灵活的…...

接口开发完后,个人对于接下来接口优化的一些思考

优化点 入参的合法性和长度范围&#xff0c;必填项的检查验证 因为没有入参&#xff0c;所以不需要考虑。 批量思想解决N1问题 // 假设要查询100个订单及其对应的用户信息 List<Order> orders orderMapper.selectList(new QueryWrapper<>().last("limit …...

jenkins 使用 ssh-agent向windows进行部署

背景&#xff1a; jenkins在linux的docker环境内&#xff0c;应用服务部署在windows。需要使用jenkins实现自动化部署。 实现方式&#xff1a; jenkins上构建pipeline任务&#xff0c;脚本如下&#xff1a; 遇到问题&#xff1a; 1、问题&#xff1a;jenkins 调用部署bat脚…...

音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现

一、引言 通过FFmpeg命令可以获取到PS文件/PS流的视频压缩编码格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、帧率信息&#xff1a; ./ffmpeg -i XXX.ps 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 &#xff08;…...

如果Adobe 退出中国后怎么办

最近听说Adobe要退出中国了?那咱们的设计师们可得好好想想怎么搞到正版软件了。别急&#xff0c;今天教大家一个超酷的福利——Edu邮箱&#xff01; Edu邮箱是什么&#xff1f;有什么好处&#xff1f; Edu邮箱就是学校给学生和老师们发的邮箱&#xff0c;一般结尾是.edu。有了…...

欧几里得距离在权重矩阵中的物理意义

欧几里得距离在权重矩阵中的物理意义 目录 欧几里得距离在权重矩阵中的物理意义**衡量神经元差异程度**:**反映模型变化程度**:**聚类和分组的依据**:自然语言处理中的模型更新:**神经网络聚类分组**:欧几里得距离在权重矩阵中的物理意义衡量神经元差异程度: 在神经网络中…...

玩转大语言模型——ollama导入huggingface下载的模型

ollama导入huggingface模型 前言gguf模型查找相关模型下载模型 导入Ollama配置参数文件导入模型查看导入情况 safetensfors模型下载模型下载llama.cpp配置环境并转换 前言 ollama在大语言模型的应用中十分的方便&#xff0c;但是也存在一定的问题&#xff0c;比如不能使用自己…...

Linux-----进程通讯(管道Pipe)

目录 进程不共享内存 匿名管道 通过匿名管道实现通讯 有名管道 库函数mkfifo() 案例 进程不共享内存 不同进程之间内存是不共享的。是相互独立的。 #include <stdio.h> #include <stdlib.h> #include <errno.h>int num 0;int main(int argc, char con…...

【C++11】列表初始化、右值引用和移动语义、引用折叠、完美转发

C11 一.C的发展历史二.列表初始化1.C98的{}2.C11的{}3.C11中的std::initializer_list 三.右值引用和移动语义1.左值和右值2.左值引用和右值引用3.引用延长生命周期4.左值和右值的参数匹配5.右值引用和移动语义使用场景1.左值引用使用场景2.移动构造和移动赋值3.右值引用和移动语…...

Openssl1.1.1s rpm包构建与升级

rpmbuild入门知识 openssh/ssl二进制升级 文章目录 前言一、资源准备1.下载openssh、openssl二进制包2.安装rpmbuild工具3.拷贝源码包到SOURCES目录下4.系统开启telnet&#xff0c;防止意外导致shh无法连接5.编译工具安装6.补充说明 二、制作 OpenSSL RPM 包1.编写 SPEC 文件2.…...

递归思想的深度理解——汉诺塔问题和青蛙跳台阶问题

递归的深度理解——汉诺塔问题and青蛙跳台阶问题 青蛙跳台阶问题汉诺塔问题 青蛙跳台阶问题 问题&#xff1a;一只青蛙可以一次跳一级台阶&#xff0c;也可以一次跳两级台阶&#xff0c;如果青蛙要跳n级台阶&#xff0c;共有多少种跳法&#xff1f; 解答&#xff1a;我们可以先…...

从数据到诊断:朴素贝叶斯算法助力肿瘤预测之路

1.案例概述 肿瘤性质的判断影响着患者的治疗方式和痊愈速度。传统的做法是医生根据数十个指标来判断肿瘤的性质&#xff0c;预测效果依赖于医生的个人经验而且效率较低&#xff0c;而通过机器学习有望能快速预测肿瘤的性质。 2.数据集 本次肿瘤预测使用的数据集共有569组样本…...

Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?

如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中&#xff1f; 在使用 Element UI 的 Table 组件时&#xff0c;如果你想要禁用某一行的选中&#xff08;特别是在多选模式下&#xff09;&#xff0c;可以通过自定义行的 selectable 属性来实现。selectable …...

Dexcap复现代码数据预处理全流程(四)——demo_clipping_3d.py

此脚本的主要功能是可视化点云数据文件&#xff08;.pcd 文件&#xff09;&#xff0c;并通过键盘交互选择演示数据的起始帧和结束帧&#xff0c;生成片段标记文件 (clip_marks.json) 主要流程包括&#xff1a; 用户指定数据目录&#xff1a;检查目录是否存在并处理标记文件 -…...

JWT理解

前言 随着互联网的快速发展&#xff0c;身份验证和授权成为了许多应用的重要需求。JWT&#xff08;JSON Web Token&#xff09;作为一种轻量级的身份验证和授权机制&#xff0c;得到了广泛的应用。本文将为您详细介绍JWT的原理、结构和优点&#xff0c;帮助您更好地理解和应用…...

一种融合联邦学习和大模型特点的全新系统架构

一种融合联邦学习和大模型特点的全新系统架构 以下是一种融合联邦学习和大模型特点的全新系统架构设计: 分层分布式架构 底层 - 数据采集与预处理层:由大量的边缘设备和终端节点组成,如智能手机、物联网传感器等。这些设备负责采集本地数据,并在本地进行初步的数据预处理,…...

html表格table导出excel,主从表格式,带样式.自动分列

html的table导出成excel, vue模板 项目使用xlsx-js-style 源代码从https://github.com/gitbrent/xlsx-js-style/releases/tag/v1.2.0 下载 用里面的dist目录下的文件即可. 复制到vue项目的public目录下的XLSX目录下. 在index.hml中引入js脚本, 为啥要在这里引入? 是因为这里…...

U8G2库使用案例(stm32)

目录 一、小球在 OLED 屏幕平面内运动并碰撞反弹的效果 二、 简单的波形生成和显示程序: 三、三维三角形旋转展示 四、正方形平面内顺时针旋转 五、带有旋转点的空心圆圈应用 六、字幕滚动效果 七、下雪动画效果 八、进度条动画效果 自己移植的U8g2库&#xff0c;OLED库…...

067B-基于R语言平台Biomod2模型的物种分布建模与数据可视化-高阶课程【2025】

课程培训包含&#xff1a;发票全套软件脚本学习数据视频文件导师答疑 本教程旨在通过系统的培训学习&#xff0c;学员可以掌握Biomod2模型最新版本的使用方法&#xff0c;最新版包含12个模型&#xff08;ANN, CTA, FDA, GAM, GBM, GLM, MARS, MAXENT, MAXNET, RF, SRE, XGBOOST…...

【通俗理解】AI的两次寒冬:从感知机困局到深度学习前夜

AI的两次寒冬&#xff1a;从感知机困局到深度学习前夜 引用&#xff08;中英双语&#xff09; 中文&#xff1a; “第一次AI寒冬&#xff0c;是因为感知机局限性被揭示&#xff0c;让人们失去了对算法可行性的信心。” “第二次AI寒冬&#xff0c;则是因为专家系统的局限性和硬…...

141.《mac m系列芯片安装mongodb详细教程》

文章目录 下载从官网下载安装包 下载后双击解压出文件夹安装文件名修改为 mongodb配置data存放位置和日志log的存放位置启动方式一方式二方式二:输入mongo报错以及解决办法 本人电脑 m2 pro,属于 arm 架构 下载 官网地址: mongodb官网 怎么查看自己电脑应该下载哪个版本,输入…...

【Linux】sed编辑器

一、基本介绍 sed编辑器也叫流编辑器&#xff08;stream editor&#xff09;&#xff0c;它是根据事先设计好得一组规则编辑数据流。 交互式文本编辑器&#xff08;如Vim&#xff09;中&#xff0c;可以用键盘命令交互式地插入、删除或替换文本数据。 sed编辑器是根据命令处理…...

unity3d-搞个场景漫游如何实现Alpha

要处理两个问题&#xff1a; 如何设置地面人不掉下去 方法一、 游戏物体加刚体&#xff0c;将游戏物体和地面加collider。如果是地形&#xff0c;可以使用 Terrain Collider&#xff1b;如果是简单的平面&#xff0c;可以添加 Box Collider 或者 Mesh Collider&#xff08;如果…...

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…...

oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln

目录 前言 1. 主机发现 2. 端口扫描 3. 指纹识别 4. 目录扫描 5. 漏洞搜索和利用 前言 oscp备考&#xff0c;oscp系列——Kioptix Level 1靶场 Kioptix Level 1难度为简单靶场&#xff0c;主要考察 nmap的使用已经是否会看输出&#xff0c;以及是否会通过应用查找对应漏…...

【简博士统计学习方法】3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间&#xff08;Hypothesis Space&#xff09;&#xff1a;所有可能的条件概率分布或决策函数&#xff0c;用 F \mathcal{F} F表示。 若定义为决策函数的集合&#xff1a; F { f ∣ Y f ( X ) } \mathcal{F…...

UnionTech OS Server 20 网页无法访问yum源地址

统信yum地址 https://euler-packages.chinauos.com/server-euler/fuyu/1060/everything/sw_64/Packages/ 浏览器访问401报错无权限&#xff0c;查看linux uos环境下yum配置的用户名和密码 cat /etc/yum/vars/auth_* 然后自己组装生成Basic Authorization def generate_basic_…...

WPF区域导航+导航参数使用+路由守卫+导航日志

背景&#xff1a;使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的&#xff0c;不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel&#xff1a; private object body;public object Body {get { retu…...

jvm基础

jvm的基本结构‌‌ ‌类加载器&#xff08;ClassLoader&#xff09;‌&#xff1a;加载class文件到内存中进行使用。 ‌运行时数据区&#xff08;Runtime Data Area&#xff09;‌&#xff1a;这是JVM在运行Java程序期间管理的内存区域&#xff0c;包括方法区&#xff08;Meta…...

kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration

1.引言 作为一名&#xff08;坦白说有点懒的&#xff09;图像处理方向的研究生&#xff0c;说实话最近新开一个坑&#xff0c;可能是因为要寒假了比较无聊&#xff0c;这次带来的系列是kaggle数据处理竞赛的经典例题&#xff1a;纽约出租车行程时间问题。希望大家多多支持&…...

Python提取目标Json键值:包含子嵌套列表和字典

目标&#xff1a;取json中所有的Name、Age字典 思路&#xff1a;递归处理字典中直接包含子字典的情况&#xff0c; import jsondef find_targ_dicts(data,key1,key2):result {}if isinstance(data, dict):if key1 in data and key2 in data: # 第一层字典中包含key1和key2re…...

<div>{{ $t(“collectionPlan“) }}</div> 中的$t是什么

$t是Vue I18n插件提供的一种方法&#xff0c;用于根据当前应用的语言环境来获取相应的翻译文本。 以下是一个简单的示例&#xff0c;展示如何在Vue I18n中定义消息&#xff1a; const i18n new VueI18n({locale: en, // 设置默认语言messages: {en: {collectionPlan: Collec…...

医学图像分析工具01:FreeSurfer || Recon -all 全流程MRI皮质表面重建

FreeSurfer是什么 FreeSurfer 是一个功能强大的神经影像学分析软件包&#xff0c;广泛用于处理和可视化大脑的横断面和纵向研究数据。该软件由马萨诸塞州总医院的Martinos生物医学成像中心的计算神经影像实验室开发&#xff0c;旨在为神经科学研究人员提供一个高效、精确的数据…...

win32汇编环境,在对话框中画五边形与六边形

;运行效果 ;win32汇编环境,在对话框中画五边形与六边形 ;展示五边形与六边形的画法 ;将代码复制进radasm软件里,直接编译可运行.重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>&g…...

小白学Pytorch

小白学Pytorch 发现一个比较好的教程&#xff0c;对于自己来说比较合适&#xff0c;适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚&#xff1a; 我们使用nn包中的Sequential搭建网络&#…...

[A-25]ARMv8/v9-GIC的系统架构(中断的硬件基础)

ver0.1 前言 我们在观看很多的影视剧过程中,尤其是军旅体裁类型的布景中,经常会看见高级干部的办公桌上都会有几部电话机。这样的电话可不能小看,重要的事情尤其是突发和紧急的情况都要通过这几部电话第一时间通知给决策者。这几部电话,必须举报几个特点:及时性好、稳定…...

毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

学习threejs,导入AWD格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.AWDLoader AWD模型加…...

C# 事件

目录 1、事件模型的5个组成部分2、使用内置委托类型声明事件2.1 EventHandler2.1.1 &#xff1f;2.1.2 this2.1.3 使用匿名函数和lamda表达式2.1.3.1 匿名函数2.1.3.2 lamda表达式 2.1.4 异常处理 2.2 EventHandler<TEventArgs> 3、使用自定义委托类型声明事件3.1 事件的…...

WebRtc02: WebRtc架构、目录结构、运行机制

整体架构 WebRtc主要分为三层&#xff1a; CAPI层&#xff1a;外层调用Session管理核心层&#xff1a;包括视频引擎、音频引擎、网络传输 可由使用者重写视频引擎&#xff1a;编解码器、视频缓存、视频增强音频引擎&#xff1a;编解码器、音频缓存、回音消除、降噪传输&#x…...

耐高压26V输入5V升压充电8.4V芯片

HU6877作为一款集成了26V高耐压保护的5V升压至8.4V两节锂电池充电管理IC&#xff0c;凭借其高效升压、智能充电管理、多重安全保护及高耐压特性&#xff0c;在高端手电筒、便携式医疗设备、无人机等领域展现出了广泛的应用前景。本文将详细探讨HU6877的技术特点、工作原理、应用…...

【连续学习之LwM算法】2019年CVPR顶会论文:Learning without memorizing

1 介绍 年份&#xff1a;2019 期刊&#xff1a; 2019CVPR 引用量&#xff1a;611 Dhar P, Singh R V, Peng K C, et al. Learning without memorizing[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2019: 5138-5146. 本文提…...