设计模式小记1

WSL2下用QEMU模拟ARM开发板:从编译uboot到调试全流程(附常见错误解决) 本文详细介绍了在WSL2环境下使用QEMU模拟ARM开发板的完整流程,包括uboot编译、内核调试等关键步骤。通过QEMU模拟vexpress-a9开发板,开发者可以高效搭建嵌入式开发环境,解决常见错误并提升开发效率。 阅读详情

单例模式

  1. 单例模式(Singleton):一个类只有一个实例,且这个类能够自行创建这个实例的一种模式;

  2. 单例模式特点:

    1. 一个单例类只能有一个单例模式;
    2. 该单例对象必须由单例类自行创建;
    3. 单例类对外提供一个访问该单例的全局访问点;
  3. 单例模式优点:

    1. 单个类只有一个实例,减少内存开销;
    2. 可以避免对资源的多重占用;
    3. 单例模式设置全局访问点,可以优化和共享资源的访问;
  4. 单例模式缺点:

    1. 单例模式一般没有接口,扩展困难;
    2. 在并发测试中,单例模式不利于代码调试;
    3. 单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则;

    实现

    1. 懒汉模式:
    public class LazySingleton{
        private static volatile LazySingleton instance = null;
        private LazySingleton(){
            
        }
        public static LazySingleton getInstance(){
            if(instance == null)
            {
                //加局部锁,保证线程安全(双重校验锁)
                sychronized(LazySingleton.class){
                    if(instance == null)
                    {
                        instance = new LazySingleton();
                    }
                }
            }
            return instance;
        }
    }
    
    
    1. 饿汉模式:
    public class HungrySingleton{
        private static final HungrySingleton instance = new HungrySingleton();
        private HungrySingleton(){
            
        }
        //线程安全
        public static HungrySingleton getInstance(){
            return instance;
        }
    }
    

简单工厂模式

  1. 在日常开发中,凡是需要生成复杂对象的地方,都可以考虑使用工厂模式来代替;复杂对象直接在其他业务类中使用,会造成严重耦合,不利于后续维护;
  2. 简单工厂模式中:创建实例的方法通常称为静态方法,简单工厂模式又叫作静态工厂方法模式;
  3. 简单工厂模式优点:
    1. 工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例;
    2. 客户端无须知道所创建具体产品的类名,只需要知道参数即可;
    3. 可以引入配置文件,在不修改客户端代码的情况下,更换和添加新的具体产品类;
  4. 简单工厂模式缺点:
    1. 工厂类单一,职责过重;
    2. 会增加类中个数,增加系统复杂度和理解难度;
    3. 系统扩展困难;
    4. 使用static方法,无法形成基于继承的等级结构;

  1. 简单工厂类:工厂类、抽象产品类、具体产品类;

image-20210311152930923

//抽象产品
public interface Product{
    void show();
}
//具体产品1
class ProductA implements Product{
    public void show()
    {
        System.out.println("...");
    }
}
//具体产品2
class ProductB implements Product{
    public void show()
    {
        System.out.println("...");
    }
}
//具体产品3
class ProductC implements Product{
    public void show()
    {
        System.out.println("...");
    }
}
//工厂类
class Factory{
    public static Product makeProduct(int kind)
    {
        switch(kind){
            case 1:
                return new ProductA();
            case 2:
                return new ProductB();
            case 3:
                return new ProductC();
        }
        return null;
    }
}

工厂方法模式

  1. 工厂方法模式类:抽象工厂,具体工厂,抽象产品,具体产品;

使用:

步骤1: 创建抽象工厂类,定义具体工厂的公共接口;
步骤2: 创建抽象产品类 ,定义具体产品的公共接口;
步骤3: 创建具体产品类(继承抽象产品类) & 定义生产的具体产品;
步骤4:创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法;
步骤5:外界通过调用具体工厂类的方法,从而创建不同具体产品类的实例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhxvkbmY-1615463735273)(https://raw.githubusercontent.com/hellohake/MyPicGoPicBed/master/img/20210311154829.png)]


//工厂模式实现
//抽象工厂
abstract class Factory{
    public abstract Product makeProduct();
}
//抽象产品类
abstract class Product
{
    public abstract void show();
}
//具体产品类1
class ProductA extends Product{
    public void show()
    {
        System.out.println("...");
    }
}
//具体产品类2
class ProductB extends Product{
    public void show()
    {
        System.out.println("...");
    }
}
//创建具体工厂类A
class FactoryA extends Factory{
    public Product makeProduct(){
        return new ProductA();
    }
}
//创建具体工厂类B
class FactoryB extends Factory{
    public Product makeProduct(){
        return new ProductB();
    }
}
//客户端调用
public class FactoryPattern{
    public static void main(String[] args){
        //要A产品
        FactoryA mFactoryA = new FactoryA();
        mFactoryA.makeProduct().show();
        //要B产品
        FactoryB mFactoryB = new FactoryB();
        mFactoryB.makeProduct().show();
    }
}

抽象工厂模式

  1. 普通工厂模式一次只能生产一类产品(考虑的是同等级产品),使用抽象工厂模式,可以一次实现多种模式:
  2. 抽象工厂模式组成类:抽象工厂,具体工厂,抽象产品,具体产品;(同普通工厂,不过抽象工厂包含的抽象产品更多)

在这里插入图片描述

//抽象工厂
interface AbstractFactory{
    public Product1 newProduct1();
    public Product2 newProduct2();
}
//具体工厂
class Factory1 implements AbstractFactory{
    public Product1 newProduct1(){
        System.out.println("11");
        return new ConcreteProduct11();
    }
    public Product2 newProduct2(){
        System.out.println("22");
        return new ConcreteProduct21();
    }
}

代理模式

  1. 代理模式:由于某些原因需要给某对象提供一个代理以控制对该对象的访问,访问对象不适合,不能直接引用目标对象,代理对象作为访问对象和目标对象之间点的中介;

  2. 代理模式优点:

    1. 代理模式可以在客户端和目标对象之间起到一个中介作用和保护目标对象的作用;
    2. 代理对象可以扩展目标对象的功能;
    3. 代理模式能将客户端和目标对象分离,在一定程度上降低了系统耦合度,增加了程序的可扩展性;
  3. 代理模式有静态代理,动态代理2种;

    1. 静态:由程序员创建代理类或特定工具自动生成源代码再对其编译,在程序运行前代理类的 .class 文件就已经存在了。
    2. 动态:在程序运行时,运用反射机制动态创建而成;
  4. 代理模式主要类:抽象主题,真实主题,代理类

在这里插入图片描述

//代理模式实现:

//抽象主题
interface Subject{
    void Request();
}
//真实主题
class RealSubject implements Subject{
    public void Request()
    {
        System.out.println("...");
    }
}
//代理
class Proxy implements Subject{
    private RealSubject realSubject;
    public void Request()
    {
        if(realSubject == null)
            realSubject = new RealSubject();
        preRequest();	//预处理
        realSubject.Request();
        postRequest();
    }
    
    public void preRequest()
    {
        System.out.println("访问真实主题之前的预处理");
    }
    public void postRequest()
    {
        System.out.println("访问真实主题之前的后处理");
    }
}

论文分享|ECCV2022,PATnet,Cross-Domain Few-Shot Semantic Segmentation,CDFSS新基准,文末有复现教程 这篇论文提出的跨域小样本语义分割(CD-FSS)任务,旨在将源域学习的分割能力迁移到目标域,仅需少量标注样本。针对传统小样本分割方法在跨域场景性能下降的问题,作者提出了基于金字塔锚点变换的网络(PATNet),通过将域相关特征转换为域无关特征,并引入任务自适应微调推理(TFI)提升目标域适应能力。实验表明,PATNet在1-shot和5-shot设置下分别比现有方法提升8.49%和10.61%的准确率。同时,作者构建了CD-FSS基准并设计了任务难度评估指标。代码和数据集已开源,复现难度中等。 阅读详情

相关推荐

别再手动算临界转速了!用ANSYS Workbench 2023 R2快速搞定转子坎贝尔图(附完整APDL命令流)

本文详细介绍了如何利用ANSYS Workbench 2023 R2快速生成转子坎贝尔图,实现全自动临界转速分析。通过对比传统手动计算与Workbench自动化流程的效率差异,展示了其在旋转机械设计中的革命性优势,包括大幅缩短分析周期、提升精度至98.7%。文章还提供了完整的APDL命令流和实战案例,帮助工程师快速掌握这一高效工具。

weixin_42699679的博客 470

Java学习小记——设计模式

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

ignb6666的博客 1526

3GPP协议解读_物理层系列(一)_物理层协议怎么看?

5G NR相关协议一般都在38系列,点进去以后可以看到,38.2xx系列为物理层相关协议,为了掌握物理层相关知识,应该怎么看协议呢?我建议从38.201读起,对38.2xx系列协议有一个整体的把握。

JCMLSY的博客 1327

设计模式小记

对类来说的,即一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2。

小安灬的博客 529

ADS新手必看:5分钟搞定Smith圆图阻抗匹配(附详细操作截图)

本文为射频电路设计新手提供了在ADS软件中快速使用Smith圆图进行阻抗匹配的实战指南。通过清晰的步骤和操作截图,详细演示了如何从负载阻抗点出发,通过添加电感和电容元件,在5分钟内完成向50欧姆标准阻抗的匹配,并介绍了仿真验证与性能调优的方法,帮助工程师和学生直观掌握这一核心技能。

weixin_29261711的博客 392

遗传算法解整数规划IntCon

x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon) IntCon就是代表整数的参量,描述的是哪几个自变量是0-1整数变量。比如navrs设置有4个变量,设置IntCon为[2 3],代表第2和第3个变量是整数。 再比如设置IntCon=2:2:nvars,代表偶数项的变量是整数。 值得注意的是一旦设置了非空的IntCon,则Aeqandbeqmust be an empty entry ([]), andnonlconmust re...

jianti9962的博客 9220

设计模式-build 小记

建造者模式通过将复杂对象的构建过程和表示分离,使得构建过程可以更灵活、可配置,并且可以创建不同表示的对象。设计模式中的建造者模式(Build)是一种创建型设计模式,用于将一个复杂对象的构建过程与其表示分离,从而使同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象 的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。4.指挥者(Director):负责调用合适的建造者方法,按照特定顺序组装产品,在隔离客户与对象的生产情况下创建复杂对象。

m0_55978242的博客 181

Matlab实战:12种优化算法在CEC2014测试集上的性能对比(附完整代码)

本文详细对比了12种优化算法在CEC2014测试集上的性能表现,包括PSO、DE、GA等主流算法。通过Matlab实现完整的实验流程,涵盖算法实现、参数设置、结果分析与可视化,为工程优化问题提供实用解决方案。特别关注收敛曲线和评价指标,帮助读者选择最适合特定场景的优化算法。

wine的专栏 681

java小记02_单例设计模式

基础知识点02 单例设计模式 概念:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以 保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。 需要: (1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。 (2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。 (3)定义...

qq_43175961的博客 200

解决k8s核心组件calico pod资源不创建问题

解决k8s核心组件calico pod资源不创建问题 1.问题描述 由于K8S集群Master节点故障,导致calico网络组件虽然处于Running状态,但是一直无法准备就绪,如下图所示 calico-node-lpt7h运行在master节点,第一时间紧急处理方法就是将其pod删除,让K8S自动重建该pod,使整个集群快速恢复 但是就当我将calico-node-lpt7h pod删除后,该pod始终无法自建,就好像是从来没有这个pod似的 2.解决方法 期初排查时,我觉得可能是由于当前master

江晓龙的博客 4806

Weibull Distribution韦布尔分布的深入详述(1)原理和公式

本章介绍韦布尔分布(weibull distribution)和实践之基本公式和推导。 韦伯分布被经常用来对失效性(Failure)或者,反而言之为,可靠性,进行衡量的工具。他的目标就是构建一个失效性分析的模型,或者说构建一个失效性分析的Pattern.【Franklin案,在展示CDF公式的之前,不得不提我们的国内的某些度知识里面的公式,采用的希腊字母完全和国外的不同,然而,很多希腊字母在使用中有特定的意义,本文采用的是通用的表达公式】 F(x)={1−e−(xλ)kx≥00x..............

山云的专栏 8万+

小记_单例设计模式

单例设计模式单例模式的实现方式饿汉式直接实例化饿汉式使用枚举式实现饿汉式静态代码块实现饿汉式懒汉式线程不安全(适用于单线程)线程安全(适用于多线程)使用静态内部类(适用于多线程) 单例模式的要点: 某个类只能有一个实例 要想实现只能有一个实例,就不能随意的去创建对象,所以构造方法就必须私有化; 该类的实例对象只能自己创建 该类的实例对象只能自己创建,那么就需要含有一个该类的静态变量来保存这个唯一的实例; 必须自行向整个系统提供这个实例 对外提供获取该实例对象的方式:(1)直接暴露;(2)用静态变量的get

SummerOfFoam的博客 183

【OpenClaw从入门到精通】第05篇:实战!OpenClaw自动化搞定邮件/日历/文件管理(2026实测避坑版)

本文聚焦OpenClaw核心实用场景,手把手教你实现邮件、日历、文件管理的全自动化。通过安装三大核心技能,配置IMAP/SMTP邮箱、跨平台日历及文件沙盒权限,结合4个虚拟实战案例,演示从邮件自动摘要、会议冲突预警到下载文件夹分类的完整流程。文中包含2026实测的命令代码、配置步骤、排障方案,所有案例需在测试环境验证,代码未上传GitHub。兼顾新手入门与进阶需求,让OpenClaw从“能聊天”升级为“能干活”,帮你节省80%重复工作时间。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2674

JAVA设计模式之小记

一、设计模式定义 四要素(关键字):名称,问题,解决方案,成效。简而言之,发现了问题,采用一些解决方案,并取得了一定的成效,对这些方案进行统一和总结就成了设计模式。 我个人比较接受的定义是:反复使用,被多数人知晓,经过分类编目的,代码设计的总结,设计模式就是一种...

china3126的博客 179

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java单列设计模式 小记

单例设计模式-------懒汉式,饿汉式单例设计模式是一种很常见的设计模式在这里介绍两种单例设计模式懒汉式与饿汉式 一、先说一说单例设计模式的特点:>>1.单例设计模式保证一个类只有一个实例。 >>2.要提供一个访问该类对象实例的全局访问点。 二、单例设计模式要点对一些类来说,只有一个实例是很重要的。例如很多时候对于某个系统只需要拥有一...

weixin_30470857的博客 116

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Spring理解】Spring中设计模式小记

1.简单工厂模式 又叫做静态工厂模式 简单工厂模式实质是有一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 beans> bean id="singletonBean" class="com.itxxz.HelloItxxz"> constructor-arg> value>Hello! 这是singletonBean!value>

店小不二的博客 302

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Spring Cloud Hystrix原理分析涉及设计模式之命令模式小记

命令模式:23中设计模式之一,将来自客户端的请求封装成一个对象,从而让你可以使用不同的请求对客户端进行参数化。可以被用于实现 “行为请求者”与“行为实现者”的解耦,以便使两者可以适应变化。下面的示例是对命令模式的简单实现: //接收者 public class Receiver { public void action(){ //真正的业务逻辑 } } //抽象命令 public i...

编程探索与数字构建 | Python与Java之旅 1070

暑假小记

这个暑假有点‘短’——错觉。 一个新的开始   这个暑假主要是围绕着DRP项目的展开进行的,从原先对java一无所知到现在慢慢的深入学习java的相关框架知识,怎么说呢?或许师哥说的很对——学习是一个过程! 按照培养计划,DRP作为第一个完整的java项目,完整的跟着学习下来——王勇老师挺有才的,给我的感觉。因为你自己学会一个知识点和你可以讲给别人并能使得别人学会这是两个完全不同的概念。在D

死理性派~~~~ 1470

设计模式学习小记-序

    闲来无事,把平时零散在记忆里的设计模式整理一下,梳理成章,遂成此文。    首先是思维导图:因为我懒,所以尚未完善       其中有摘抄也有注释,大概类似读书笔记一样。   闲言少叙,开始正文   聊到设计模式就不得不谈六大设计原则,设计模式都是从设计原则升华而来。所以先了解设计原则是很有必要的   一、单一职责原则         不要存在多于一个导致类变更的原因。即一个类只负责一项职...

fs060171816的专栏 266

2020-10-27 Java框架小记_三层架构/MVC设计模式/SSH框架

1.三层架构和MVC设计模式简介: 项目开始,首先需要进行架构设计,一般采用的就是分层式的架构设计,即三层架构;然后,在确定了架构以后,再根据项目的具体需求去考虑是否需要应用一些设计模式,比如是否应用MVC模式,抽象工厂模式等等。 三层架构(UI-BLL-DAL) 将整个项目划分为:表现层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer): ...

qq_36095102的博客 481

设计模式解析读书小记

1、书中反复强调Bridge模式是抽象与实现分离,读完之后为了便于理解,总结为抽象指明对象是什么,实现指明对象做什么或怎么做。2、Page 150介绍抽象工厂模式中间说到switch语句的问题。看多了设计模式的书,似乎见到switch语句就像用多态替换掉。可是有时候发现最后只是把switch语句使用的地方换了一下,放在更高或者更低的实现层。以后应该注意总结switch到底什么地方是“互相耦合”

strawbear的专栏 584

经典java题小记

java基础面试题

qq_37824570的博客 501

2024十家公司前端面试小记

而委托与事件几乎是一家子。这个简直老生常谈,不管是园子里还是园子外,关于前端优化的东西太多太多了,不同角度不同方向也有很多,网络性能优化,加快访问速度,浏览器并行加载数量,怎样实现原生JS异步载入,CDN加速的原理,如何将不同静态资源发布到多个域名服务器上,发布后这些静态字段的url路径改怎么批量改写,用什么工具进行项目打包,css打包后的相对路径怎么转换为绝对路径,用什么工具进行项目模块依赖管理,怎么进行cookie优化等等,而正则就没有这个问题,他只匹配出正确的配对,非法的全部过滤掉,简单,方便。

2401_85142240的博客 1017

十月通勤小记

一、JVM核心原理(通勤20分钟/天,7天掌握)

qq_43796170的博客 536

java随堂小记

工具类:为解决某些特定问题,特意编写的公共类(程序员都可以使用)工具类的构造方法,设置为private(不让其他类创建对象)在Java继承体系中,有一个顶层父类:Object(鼻祖类)Calendar类:日历类(存储的有日期、时间、日历信息)问题:在继承时,子类可能把父类的构造方法继承了吗?答案:创建类的对象,通过"对象名.成员"的方式访问。问题:如何访问某个类中的成员变量or成员方法?工具类中提供:静态方法(通过类名访问)问题2:继承解决程序中的什么问题?问题:在一个类中可以书写哪些内容?

2301_79758400的博客 1192
上一篇: 20210311-面试1
下一篇: 安装KDL运动学库
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值