框架(Framework)中常用设计模式分析

2023-11-04

简介

概述

软件模式是在软件开发过程中对某些可重现问题的一些有效解决方法,软件模式的基础结构主要由四部分构成,包括问题描述【待解决的问题是什么】、前提条件【在何种环境或约束条件下使用】、解法【如何解决】和效果【有哪些优缺点】等。

模式分类

基于设计模式的特点,我们可以分为三大类,例如:
创建型模式(5种):
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式(7种):
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式(11种):
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

创建型模式设计与分析

简单工厂模式

如何理解简单工厂模式?

  • 通过静态方法(相对比较多)或实例方法创建对象.
  • 封装对象创建过程(基于条件的不同创建不同的具体产品)

简单工厂应用场景分析?

  • JDBC(DriverManager.getConnection(……))
  • HikariCP(HikariDataSource.getConnection())
  • Mybatis(Configuration,…)
  • SpringBoot(RedisConnectionFactory)

简单工厂中的对象角色?

  • 抽象产品对象(例如MyBatis中Executor,…)
  • 具体产品对象 (例如MyBatis中SimpleExecutor,…)
  • 具体工厂对象(例如Configuration,…)
    在这里插入图片描述

简单工厂应用分析?

  1. 优势:解耦(对象应用者与对象创建者之间的耦合),简单
  2. 劣势:可扩展性相对较差(创建产品的对象的工厂方法不够灵活)

工厂方法模式(Factory Method)

如何理解工厂方法模式?

  • 创建型模式(负责创建对象)
  • 工厂模式(平时所说的工厂模式就是工厂方法模式)
  • 此模式的特点是基于抽象工厂扩展具体工厂然后创建产品对象。

工厂方法模式的应用场景分析?

  • Mybatis (SqlSessionFactoryBean)
  • Spring(DataSourceFactory,TransactionFactory)

工厂方法模式角色分析?

  • 抽象产品(Product)
  • 具体产品(ConcreteProduct)
  • 抽象工厂(Factory)
  • 具体工厂(ConcreteFactory)

在这里插入图片描述

例如:
mybatis中创建SqlSession对象

  • SqlSession(抽象产品)
  • DefaultSqlSession(具体产品)
  • SqlSessionFactory(抽象工厂)
  • DefaultSqlSessionFactory(具体工厂)

Spring整合mybatis时,SqlSessionFactory对象过程分析。

  • SqlSessionFactory (抽象产品)
  • DefaultSqlSessionFactory(具体产品)
  • FactoryBean(抽象工厂)
  • SqlSessionFactoryBean(具体工厂)

工厂方法模式应用分析?
1)优势: 相对于简单工厂更加灵活,更加适合创建具备等级结构(继承关系)的产品。
2)劣势: 假如每个抽象产品都对应一个具体工厂,那么工厂类可能会比较多。

抽象工厂(Abstract Factory)

如何理解抽象工厂?

  • 工厂方法模式用于创建具备一定等级结构的产品。
  • 抽象工厂是多个工厂方法的综合应用,因为它要同时创建多个具备一定等级结构的产品,我们可以将这些产品理解产品族。

抽象工厂的应用场景?(产品族—>多个抽象产品)

  • Spring(ClientHttpRequestFactory):了解消息头,消息体对象创建

抽象工厂对象角色分析?

  • 抽象产品(Product)
  • 具体产品(ConcreteProduct)
  • 抽象工厂(Factory)
  • 具体工厂(ConcreteFactory)

在这里插入图片描述

例如:ClientHttpRequestFactory 抽象工厂的应用

  • 抽象工厂 (ClientHttpRequestFactory)
  • 具体工厂 (SimpleClientHttpRequestFactory)
  • 抽象产品 (ClientHttpRequest,HttpHeaders,…)
  • 具体产品 (SimpleStreamingClientHttpRequest,…)

抽象工厂应用分析?

  • 优势:工厂方法模式可能会产生多个工厂类,基于抽象工厂可创建产品族对象,可以减少工厂类对象的个数,从而更好节省资源。
  • 劣势:一旦有新的产品族的诞生,这个抽象工厂扩展起来就会比较复杂。

建造模式(Builder)

如何理解建造模式?

  • 又称之为构建模式(施工队模式),通常用于构建相对比较复杂对象。例如,构建过程复杂,对象依赖关系复杂。
    在这里插入图片描述
    建造模式应用场景分析?

  • Mybatis(SqlSessionFactoryBuilder,XmlConfigBuilder,XmlStatementBuilder)

  • Spring(XmlBeanDefinitionReader)

  • redis(RedisCacheManager)

建造模式对象角色分析?

  • 抽象建造对象角色(Builder):可能是接口,也可能是抽象类,此角色也可以省略。
  • 具体建造对象角色(ConcreteBuilder)
  • 导演角色(Director): 持有建造者对象,可以省略
  • 抽象产品角色(Product) 抽象产品角色,可以省略
  • 具体产品角色(ConcreteProduct) 具体产品角色

在这里插入图片描述

建造模式应用分析?

  • 优势:解耦对象的应用以及对象创建,通过建造者创建复杂产品对象,尤其是基于配置文件创建对象的场景。
  • 劣势:要构建的对象结构假如频繁变化可能导致构建者对象的设计比较复杂。

单例模式(Singleton)

如何理解单例模式?

  • 保证一个类的实例在”特定范围”只有一份(例如一个JVM内部,一个线程内部),并且提供一个全局访问点可以访问到这份实例。

单例模式的应用场景?

  • Spring(Singleton作用域的Bean对象,AbstractBeanFactory的getSingleton方法)
  • MyBatis(ErrorContext对象是每个线程一份此类实例)
  • HikariCP(HikariPool)
  • JDK (Runtime,…)

单例模式对象角色构成?

  • 具体产品对象(例如Singleton)

在这里插入图片描述

单例模式应用分析

  • 优势:科学使用资源,避免频繁创建,销毁对象时造成的资源浪费。
  • 劣势:设计不够严谨会存在线程安全问题,可扩展性相对较差。

原型模式(Prototype)

对象的克隆(对象的一个拷贝),例如Cloneable接口

结构型模式设计及分析

适配器模式 (Adapter)

如何理解适配器模式?

  • 适配器模式将一个接口转换成客户希望的另一个接口,以解决接口不兼容问题。
  • 又名包装器(Wrapper)模式
  • 分为类适配器,对象适配器。
    在这里插入图片描述
    适配器模式场景分析?
  • 生活中(一拖三充电头、HDMI 转 VGA)
  • mybatis (Log接口)
  • spring (HandlerAdapter,AdvisorAdapter)

适配器模式对象角色构成?

  • Target(目标抽象类):抽象类或接口,也可以是具体类
  • Adapter(适配器类): 负责对Adaptee和Target进行适配。
  • Adaptee(适配者类):适配者即被适配的角色。
    在这里插入图片描述

适配器模式应用分析?

  • 优势:对客户端透明,扩展性好,复用性好
  • 劣势:是一种补偿机制的实现,主要用于后期扩展。

装饰模式 (Decorator)

如何理解装饰模式?

  • 油漆工模式
  • 基于目标对象添加额外职责(功能扩展)
    在这里插入图片描述

装饰模式场景分析?

  • mybatis(Executor,Cache)
  • spring(…)

装饰模式角色构成?

  • Component: 抽象构件
  • ConcreteComponent: 具体构件
  • Decorator: 抽象装饰类
  • ConcreteDecorator: 具体装饰类
    在这里插入图片描述

装饰模式应用分析?

  • 提供了相对继承更加灵活的功能扩展方式
  • 实现相对复杂。

代理模式 (Proxy)

如何理解代理模式?

  • 基于目标对象创建代理对象,并由代理对象控制目标对象的执行。
  • 基于OCP原则扩展目标对象的功能。
    在这里插入图片描述

代理模式场景分析?

  • mybatis (为接口创建代理对象,拦截器应用)
  • spring (AOP)

代理模式角色构成?

  • Subject: 抽象主题角色
  • Proxy: 代理主题角色
  • RealSubject: 真实主题角色

在这里插入图片描述

代理模式应用分析?

  • 优势:基于OCP进行控制,扩展目标对象
  • 劣势:由于代理对象的创建可能会导致性能上的缺陷。

享元模式(Flyweight)

如何理解享元模式?

  • 以共享的方式使用对象。
  • 通过共享技术有效地减少对象创建,支持对象的复用。
    在这里插入图片描述

享元模式应用场景分析?

  • 整数池,字符串池
  • 连接池,线程池

享元模式角色构成?

  • 抽象享元角色:由抽象类、接口来担当。
  • 具体享元角色:抽象类、接口对应的子类或实现。。
  • 享元工厂角色:负责创建和管理享元角色。
  • 客户端角色:维护对所有享元对象的引用。

享元模式应用分析?

  • 优点:大大减少对象的创建,降低系统的内存,使效率提高。
  • 缺点:提高了系统的复杂度

门面模式(Façade)

如何理解门面模式?

  • 隐藏系统的复杂性,并向对外提供一个可以访问系统的门面接口。
  • 简化对目标子系统相关类方法的调用,侧重于功能整合(多个小系统或小对象整合成一个功能丰富的大对象)

在这里插入图片描述
门面模式应用场景分析?

  • 日志门面API,例如SLF4J

门面模式的角色构成?

  • 门面角色:客户端调用这个角色的方法。
  • 子系统角色:可以同时有一个或者多个子系统。

门面模式应用分析?

  • 优点:减少系统相互依赖,提高灵活性和安全性。
  • 缺点:增加子系统,需要修改门面类,容易引入风险。

组合模式(Composite)

如何理解组合模式?

  • 又叫合成模式,体现的是整体部分关系。
    在这里插入图片描述

组合模式应用场景分析?

  • mybatis中的SqlNode(动态sql)
  • spring mvc 中的HandlerMethodArgumentResolverComposite。

组合模式的角色构成?

  • 组合部件(Component):它是一个抽象接口。
  • 叶子(Leaf):在组合中表示子节点对象。
  • 合成部件(Composite):表示自己还有孩子。

组合模式应用分析?

  • 优点:减少系统相互依赖,提高灵活性和安全性。
  • 缺点:增加子系统,需要修改门面类,容易引入风险。

桥接模式(Bridge)

如何理解桥接模式?

  • 把抽象(abstraction)与行为实现(implementation)分离。
    在这里插入图片描述
    桥接模式应用场景分析?
  • JDBC (DriverManager Driver)

桥接模式的角色构成?

  • 抽象角色(Abstraction):抽象类或接口。
  • 具体抽象角色实现(RefinedAbstraction):扩充抽象类。
  • 操作抽象角色(Implementor):抽象类或接口。
  • 具体操作角色(ConcreteImplementor):具体实现类,实现或继承了操作抽象角色 。

桥接模式应用分析?

  • 优点:解耦,使得抽象和实现可以独立扩展,进而提高其灵活性。
  • 缺点:客户应用方必须知道选择哪一种类型的实现。

行为型模式设计及分析

策略模式(Strategy)

如何理解策略模式?

  • 基于面向对象中封装变化的思想将算法进行封装。
  • 基于多态特性实现策略的灵活变化(雕刻印刷到活字印刷)
  • 策略模式中每个行为或算法之间没有关联。
    在这里插入图片描述
    策略模式场景分析?
  • MyBatis(Executor,Cache)
  • Spring (Aop,Resource)
  • Spring Cloud (Ribbon,IRule)

策略模式角色构成?

  • Context: 环境类 (抽象策略持有者)
  • Strategy: 抽象策略类 (定义了策略的抽象类或接口)
  • ConcreteStrategy: 具体策略类(实现了具体策略的对象)
    在这里插入图片描述

策略模式应用分析?

  • 优势:稳定, 较为灵活,扩展性好,避免了大量的if else结构。
  • 劣势:对外暴露了类所有的行为和算法,行为过多导致策略类膨胀。

模板方法模式(Template Method)

如何理解模板方法模式?

  • 基于算法步骤进行封装(算法骨架)
  • 算法步骤中的部分实现交给子类

模板方法模式场景分析?

  • mybatis (SqlSessionTemplate,BaseExecutor)
  • Spring (JdbcTemplate)

模板方法模式角色构成?

  • 抽象产品(AbstractObject)
  • 具体产品(ConcreteObject)
    在这里插入图片描述

模板方法模式应用分析?

  • 优势:提高代码的复用性。
  • 劣势:对于静态方法而言不能实现多态特性。

观察者模式(Observer)

如何理解观察者模式?

  • 定义了对象之间的一种一对多的依赖关系
  • 对象状态发生变化,其所有依赖对象可以得到通知。
    在这里插入图片描述
    观察者模式场景分析?
  • Spring(ApplicationListener)

观察者模式角色构成分析?

  • 目标对象角色(Subject)
  • 具体目标对象角色(ConcreteSubject)
  • 抽象观察者角色(Observer)
  • 具体观察者角色(ConcreteObserver)

观察者模式应用优势、劣势分析?

  • 优势:降低了目标对象与观察者对象之间的耦合。
  • 劣势:目标对象观察者比较多的话,性能上会有影响。

迭代器模式(Iterator)

如何理解迭代器模式?

  • 又称为游标(Cursor)模式。
  • 提供一种方法,顺序访问聚合对象(集合)中的元素。
  • 聚合对象只负责数据存储,而内部数据的迭代交给迭代器,以实现“单一职责”原则。
    在这里插入图片描述

迭代器模式场景分析?

  • Java (Iterator)

迭代器模式角色构成?

  • 客户端角色(Client)
  • 抽象聚合类(Aggregate)
  • 具体聚合类(ConcreteAggreate)
  • 抽象迭代器(Iterator)
  • 具体迭代器(ConcreteIterator)

在这里插入图片描述

迭代器模式应用优势、劣势分析?

  • 优势:支持不同方式遍历聚合对象,遵守了单一职责元素,开闭原则。
  • 劣势:类的个数增加,增加了系统的复杂性。

状态模式(State)

如何理解迭代器模式?
-允许对象在内部状态发生改变时改变它的行为。
-将对象状态封装成独立的类,每个状态都有对应该状态下的事务,并可控制该状态到其他状态的转移。
-状态模式中的状态之间有关联,并且状态本身控制着状态转移。
在这里插入图片描述

状态模式应用场景分析?

  • 对象依赖状态,行为随状态改变而改变的情景,或者存在大量的if else和分支结构等
  • Spring状态机

状态模式角色构成?

  • Context(环境类)环境类又称为上下文类,它是拥有多种状态的对象。
  • State(抽象状态类)在抽象状态类中声明了各种不同状态对应的方法
  • ConcreteState(具体状态类)每一个具体状态类对应环境的一个具体状态,不同的具体状态类其行为有所不同。
    在这里插入图片描述
    状态模式应用优势、劣势分析?
  • 优势: 容易新加状态,封装了状态转移规则,每个状态可以被复用和共享,避免大量的if else结构。
  • 劣势:该模式结构和实现相对复杂,状态过多导致增加类和对象个数。

命令模式(Command)

如何理解命令模式?

  • 将请求封装为对象,使请求发出方和请求执行方责任分开,也就是解耦。

命令模式应用场景分析?

  • 请求调用者需要与请求接收者解耦时,命令模式可以使调用者和接收者不直接交互。
  • 系统随机请求命令或经常增加、删除命令时,命令模式可以方便地实现这些功能。

命令模式角色构成?

  • 抽象命令类(Command)角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。
  • 具体命令类(Concrete Command)角色:它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。
  • 实现者/接收者(Receiver)角色:执行命令功能的相关操作,是具体命令对象业务的真正实现者。
  • 调用者/请求者(Invoker)角色:是请求的发送者,它可拥有多个命令,并通过访问命令对象来执行请求,它不直接访问接收者。
    在这里插入图片描述
    命令模式应用优势、劣势分析?
  • 通过引入抽象接口降低系统的耦合度。
  • 扩展性良好,增加或删除命令非常方便,满足“开闭原则”。
  • 可能产生大量具体的命令类,这会增加系统的复杂性。

解释器模式(Interpreter)

如何理解解释器模式?

  • 使用类定义语法,实用继承机制改变或扩展。
    解释器模式应用场景分析?
  • 当语言的文法较为简单,且执行效率不是关键问题时。
  • 当问题重复出现,且可以用一种简单的语言来进行表达时。
  • 当一个语言需要解释执行,并且语言中的句子可以表示为一个抽象语法树的时候,如 XML 文档解释。
    解释器模式角色构成?
  • 抽象表达式(Abstract Expression):定义解释器的接口,约定解释器的解释操作,主要包含解释方法 interpret()。
  • 终结符表达式(Terminal Expression):是抽象表达式的子类
  • 非终结符表达式(Nonterminal Expression):也是抽象表达式的子类
  • 环境(Context)角色:通常包含各个解释器需要的数据或是公共的功能
  • 客户端(Client):主要任务是将需要分析的句子或表达式转换成使用解释器对象描述的抽象语法树。
    在这里插入图片描述
    解释器模式应用优势、劣势分析?
  • 扩展性好, 容易实现。
  • 执行效率较低,会引起类膨胀。

访问者模式(Visitor)

如何理解访问者模式?
访问者模式应用场景分析?
访问者模式角色构成?
访问者模式应用优势、劣势分析?

职责链模式(Chain of Responsibility)

如何理解责任链模式?
责任链模式应用场景分析?
责任链模式角色构成?
责任链模式应用优势、劣势分析?

中介者模式(Mediator)

如何理解中介者模式?
中介者模式应用场景分析?
中介者模式角色构成?
中介者模式应用优势、劣势分析?

备忘录模式(Memento)


如何理解备忘录模式?
备忘录模式应用场景分析?
备忘录模式角色构成?
备忘录模式应用优势、劣势分析?

总结(Summary)

设计模式描述的是一种套路,一种经验的总结,对于编码初学者如何保证代码的的质量呢,个人觉得这些模式就是一种规范。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

框架(Framework)中常用设计模式分析 的相关文章

  • Math.random() 解释

    这是一个非常简单的 Java 尽管可能适用于所有编程 问题 Math random 返回 0 到 1 之间的数字 如果我想返回零到百之间的整数 我会这样做 int Math floor Math random 101 在一到一百之间 我会这
  • Java 中类似 HashMap 的可排序数据结构?

    Java 中是否有某种类似于 HashMap 的数据结构 可以按键或值排序 在 PHP 中 您可以拥有可排序的关联数组 Java中有这样的东西吗 HashMaps 几乎按照定义是未排序的 一个好的哈希函数会产生看似随机的密钥分布 如果你想使
  • JDT - 尝试更改类型的超类。我不知道超级类的限定名称

    我有一个程序 除其他任务外 还必须使用 JDT 更改某些类的超类 我有两个字符串 其中包含要交换的超类的限定名称 例如 org example John 和 org example Smith 并且我正在解析整个 AST 搜索扩展这些类的类
  • 如何在 Java 中验证从 Azure AD B2C 生成的 JWT 令牌?

    我正在寻找 Java 代码示例来验证 Azure AD B2C 令牌 我们可以使用哪些依赖项 所有 JWT 令牌的 JWT 令牌验证步骤或代码是否相同还是会有所不同 我们的项目中没有使用 Spring Security 有大量的图书馆her
  • 方法重载。你能过度使用它吗?

    当定义多个使用不同过滤器返回相同形状的数据的方法时 什么是更好的做法 显式方法名称或重载方法 例如 如果我有一些产品并且我正在从数据库中提取 显式方式 public List
  • 克隆 dom.Document 对象

    我的目的是将xml文件读入Dom对象 编辑dom对象 其中涉及删除一些节点 完成此操作后 我希望将 Dom 恢复到其原始状态 而不实际解析 XML 文件 无论如何 我可以克隆第一次解析 xml 文件后获得的 dom 对象吗 这个想法是避免一
  • Spring批量写入器限制

    我正在工作 Spring Batch 项目 从数据库读取记录然后写入rabbitmq 然后发送到HTTP消息网关 网关有150TPS我需要将我的应用程序限制为 150TPS 有没有办法带弹簧批的油门或者还有其他更好的方法吗 你能行的 在 S
  • 从 java 类生成 xsd 的实用程序

    我想为以下类生成 xsd public class Node private String value private List
  • java.time.LocalDate 到 java.util.Date

    转换的最佳方式是什么java time LocalDate to java util Date Date from dateToReturn atStartOfDay ZoneId systemDefault toInstant 我一直在尝
  • Logback 配置在单行上有异常吗?

    我的日志被提取 传输并合并到 elasticsearch 中 多行事件很难跟踪和诊断 有没有办法使用收集器和正则表达式将异常行分组到单个记录中登录配置 https logback qos ch manual layouts html xTh
  • 在Java中读取制表符分隔的文件

    我有以下代码来读取 Java 中的制表符分隔文件 while str in readLine null if str trim length 0 continue String values str split t System out p
  • SQLiteAssetHelper 甚至在从资产文件夹复制数据库之前就导致立即崩溃

    https github com jgilfelt android sqlite asset helper https github com jgilfelt android sqlite asset helper 我要从SQLiteOpe
  • 如何使 JFileChooser 仅显示具有某些特定名称 Java 的文件夹

    有什么方法可以让 JFileChooser 加载时仅显示名称为 Hello 的文件夹 这是我的代码 它显示所有文件夹以及扩展名为 py 和 java 的文件 我想添加文件夹名称限制 FileNameExtensionFilter filte
  • 当对话框打开时如何处理屏幕方向变化?

    我有一个 Android 应用程序 它已经在处理方向的更改 即有一个android configChanges orientation 在清单和onConfigurationChange 活动中的处理程序切换到适当的布局并准备它 我有一个横
  • 如何在 Spring GCP 中订阅多个 Google PubSub 项目?

    我想在 Spring Boot 应用程序中订阅多个 Google Cloud PubSub 项目 阅读完相关问题后如何使用 Spring Cloud 在一个 Spring Boot 应用程序中连接 配置两个 pubsub gcp 项目 ht
  • 我的代码线程不安全吗?

    我编写了代码来理解 CyclicBarrier 我的应用程序模拟选举 每轮选出得票少的候选人 该候选人从竞争中淘汰以获得胜利 source class ElectoralCommission public volatile boolean
  • 如何为用户的活动设置计时器?

    如果用户在 5 小时内停止工作 我需要执行特定的方法 假设用户已登录 但他在 5 小时内没有向数据库的特定表添加任何记录 任何时候用户将记录添加到指定的表中 该特定用户的计时器都应该重置 否则它将继续运行 如果达到 5 小时 应用程序应显示
  • 将Json字符串映射到java中的map或hashmap字段

    假设我从服务器返回了以下 JSON 字符串 response imageInstances one id 1 url ONE two id 2 url TWO 杰克逊代码大厦 JsonProperty 我怎样才能得到HashMap对象出来了
  • 每次修改代码时都必须 mvn clean install

    我不是来自 Java 世界 但我必须为我的一个项目深入研究它 我不明白为什么每次修改或更新代码时 都必须 mvn clean install 来调试代码的最新版本 你知道为什么吗 尝试按Ctrl Shift F9 热插拔 有时会有所帮助
  • 仅当用户开始输入时清除 JavaFX TextField 中的提示文本

    默认行为是当字段获得焦点时 字段中的提示文本将被删除 那是标记在场上的时候 是否可以配置文本字段 以便仅在用户开始输入时删除提示文本 否则 我需要在每个文本字段旁边 上方添加一个标签 以描述其中的值 我知道它有点旧 但我自己也需要它 这仍然

随机推荐

  • Scala学习第一天(十三):映射(可变/不可变Map;Map基本操作)

    学习目标 映射 不可变Map 可变Map Map基本操作 映射 Map可以称之为映射 它是由键值对组成的集合 在Scala中 Map也分为 不可变Map 可变Map 不可变Map 语法 val var map Map 键 gt 值 键 gt
  • Spring @ComponentScan 自定义扫描规则

    Spring ComponentScan 组件中扫描规则使用场景 package org example cap2 config import org springframework context annotation Bean impo
  • Apache Beam简介及相关概念

    文章目录 一 简介 二 基本概念 1 Pipelines 2 PCollection 3 Transforms 4 ParDo 5 Pipeline I O 6 Aggregation 7 User defined functions UD
  • H5 手机键盘兼容

    文章目录 键盘弹起页面表现 ios表现 安卓表现 监听软键盘弹起和收起 ios监听focus blur事件 安卓还可见监听页面高度 获取软键盘高度 通过window visualViewport异步获取 唤起软键盘始终让焦点元素滚动到可视区
  • SQL执行计划的十大参数

    调用分析指令分析sql再进行对应的调优 explaion select 十个参数 id 编号 select type 查询类型 table 表 type 索引类型 possible keys 预测可能用到的索引 key 实际使用的索引 ke
  • css实现垂直居中6,CSS实现水平、垂直居中的6种方式

    1 块级元素和行内元素 2 水平居中和垂直居中 3行内元素的水平居中 1 table 2 设置line height 3 text align center 4 margin 0 auto 5 绝对定位 6 flex弹性盒模型 7 calc
  • Http协议、get和post请求整理

    1 什么是GET 和 POST GET 和 POST 其实都是 HTTP 的请求方法 除了这 2 个请求方法之外 HTTP 还有 HEAD PUT DELETE TRACE CONNECT OPTIONS 这 6 个请求方法 所以HTTP的
  • VMware16 Pro的安装及VMware配置CentOS7虚拟机(快照使用)

    VMware16 Pro下载安装 1 进入官网下载 VMware官网 2 选择资源栏目 点击产品下载 3 找到VMware Workstation Pro进行下载 搜索框搜索 vmware workstation 16 pro for wi
  • mysql中双引号和单引号有什么区别

    mysql中双引号和单引号有什么区别 前2天看到有人问 mysql中双引号和单引号有什么区别 希望大家可以关注下公众号 支持一下 鞠躬感谢 我就直接po代码和截图了 如下 select from employees where last n
  • vue3 + vite npm 组件库开发(一)

    1 创建项目 创建一个普通的vite vue3 项目即可 我这里创建的是ts的项目 js也可 根据自己的使用习惯 2 配置项目 根目录下创建packages目录作为组件的开发包 目录下index ts 作为整个组件库的出口文件 导出组件 i
  • “目标检测“+“视觉理解“实现对输入图像的理解

    提出了GLIPv2 一种基于VL的理解模型 它服务于localization任务 例如 目标检测 实例分割 和视觉语言 VL 理解任务 例如 VQA 图像字幕 论文地址 https arxiv org pdf 2206 05836 pdf
  • 如何利用ProcessOn 做资产管理流程图

    资产管理 是一家公司最重要的管理活动 好的资产管理可以让资源最优化利用 实现资产价值的最大化 可以帮助组织管理和降低风险 同时当需要决策的时候 对资产数据进行分析和评估 也可以帮助做出更明智的决策 如优化资产配置 更新技术设备等 一 资产流
  • 笔记24-1(C语言进阶 程序环境和预处理)

    目录 注 推荐书籍 程序的翻译环境和执行环境 编译和链接 翻译环境 编译 预处理 编译 汇编 链接 运行环境 执行环境 注 本笔记参考 B站up 鹏哥C语言 推荐书籍 程序员的自我修养 程序的翻译环境和执行环境 在ANSI C的任何一种实现
  • 可以同情弱者,别同情弱势!

    大家好 我是北妈 0 最近北妈在重刷 天道 里面提到了一个强势文化 弱势文化的概念 我觉得对生活和职场 感情都有些指导作用 我看影评和各种文章讨论这个的概念比较多 毕竟大家都喜欢谈格局 强弱 今天讨论下如何成为强者 强者是不是应该鄙视弱者
  • C++类与对象:初始化列表(赋值和初始化的区别)

    标题 使用初始化列表的情况 初始化与赋值的区别 构造函数体内部是赋值 初始化列表 const成员变量初始化 自定义类型成员初始化 成员变量的缺省值 临时变量 总结 使用初始化列表的情况 成员变量是const类型 成员变量是引用类型 成员变量
  • 求出最大连续子序列和 暴力算法、分治法、动态规划、贪心算法实现;Leecode 51.最大子序和

    求出最大连续子序列和 问题描述 给定一个整数数组 a 找到一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 这个问题也可转入Leecode 51 最大子序和 来源 力扣 LeetCode 示例 输入 2 1 3 4 1 2
  • MAC /usr/bin/目录下 Operation not permitted的解决

    mac系统下的Rootless机制 让我们在root权限下也不能随心所欲的读写所有路径了 特殊情况下我们需要关闭Rootless时 可尝试如下操作 1 重启按住 Command R 进入恢复模式 打开Terminal 2 键入命令 csru
  • 【性能测试】Jenkins+Ant+Jmeter自动化框架的搭建思路

    前言 前面讲了Jmeter在性能测试中的应用及扩展 随着测试的深入 我们发现在性能测试中也会遇到不少的重复工作 比如某新兴业务处于上升阶段 需要在每个版本中 对某些新增接口进行性能测试 有时还需要在一天中的不同时段分别进行性能测试 如果一味
  • Gradle Core Plugins (plugin is not in 'org.gradle' namespace)

    记录一个由 gradle 构建项目遇到的问题 起因 项目原先运行正常 不过个人 移除掉默认仓库 gradle 仓库后 重新拉取报错如下 FAILURE Build failed with an exception Where Build f
  • 框架(Framework)中常用设计模式分析

    文章目录 简介 概述 模式分类 创建型模式设计与分析 简单工厂模式 工厂方法模式 Factory Method 抽象工厂 Abstract Factory 结构型模式设计及分析 适配器模式 Adapter 装饰模式 Decorator 代理