IDEA启动!!
本文主要记录一些IDEA常用的 "基本设置" 和 "基本操作" ,方便本人遗忘时快速查询。
【设计模式】观察者模式
1. 定义及特点观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
意图:创建了对象间的一种一对多的依赖关系,当一个对象状态改变时,所有依赖于它的对象都会得到通知并自动更新。
主要解决的问题:观察者模式解决的是一个对象状态改变时,如何自动通知其他依赖对象的问题,同时保持对象间的低耦合和高协作性。
举例:某公司发布了一款新的手机,性能很强大,许多人都想买,但是该公司又没宣布售卖时间。想买的人为了第一时间就拥有这台手机,就必须每天到官网或线下实体店看有没有出售,这样对于用户来说体验很不好。如果不想频繁的去查看,这时想买手机的用户就可以在实体店或网站上留下联系方式,等到手机出售的当天公司通过邮件或者短信的形式通知到购买者。
优点
符合开闭原则。 无需修改发布者代码就能引入新的观察者类 。
可以在运行时建立对象之间的联系。
缺点
无法设置订阅者收到的 ...
【设计模式】代理模式
0. 引言代理模式是非常常见的模式,在生活中的例子也非常多,例如你不好意思向你关系不太好朋友帮个忙,这时需要找一个和它关系好的应一个朋友帮忙转达,这个中间朋友就是代理对象。例如购买火车票不一定要去火车站买,可以通过12306网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。
1. 定义及特点代理模式(Proxy)的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。这种类型的设计模式属于结构型模式。
优点
功能增强:无需修改目标对象,即可添加额外功能。
访问控制:实现权限校验、懒加载等访问控制机制。
性能优化:通过缓存减少重复请求,提高系统性能。
缺点
系统复杂性:增加理解和维护成本。
性能开销:代理处理可能导致请求速度变慢。
调试难度:涉及多个对象,调试更复杂。
使用建议
根据具体需求选择合适的代理类型,如远程代理、虚拟代理、保护代理等。
确保代理类与真实对象接口一致,以便客户端透明地使用代理。
与其他模式的区别
与适配器模式的 ...
【设计模式】单例模式
1. 定义及特点单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。
意图:确保一个类只有一个实例,并提供一个全局访问点来访问该实例。
主要解决:频繁创建和销毁全局使用的类实例的问题。
何时使用:当需要控制实例数目,节省系统资源时。
如何解决:检查系统是否已经存在该单例,如果存在则返回该实例;如果不存在则创建一个新实例。
关键代码:构造函数是私有的。
优点
内存中只有一个实例,减少内存开销,尤其是频繁创建和销毁实例时(如管理学院首页页面缓存)。
避免资源的多重占用(如写文件操作)。
缺点
没有接口,不能继承。
与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心实例化方式。
2. 适用场景
生成唯一序列号。
WEB 中的计数器,避免每次刷新都在数据库中增加计数,先缓存起来。
创建消耗资源过多的对象,如 I/O 与数据库连接等。
3. 饿汉式与懒汉式
饿汉式:类加载就会导致该单实例对象被创建。
懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时被创建。
3.1 饿汉式饿汉式简单实现代码如下:
123456 ...
【设计模式】策略模式
参考视频:尚硅谷Java设计模式(图解+框架源码剖析)
1. 定义及特点策略模式定义了一系列算法,并将它们封装起来,使它们可以相互替换。这些算法被封装在独立的策略类中,客户端通过策略接口来调用算法,而不需要知道具体的算法实现。这样,算法的变化就不会影响到使用这些算法的客户,从而实现了算法与客户端的解耦。
优点
算法的自由切换:策略模式使得算法可以独立于使用它们的客户端而变化,从而可以在运行时动态地切换算法。
避免使用多重条件语句:通过将算法封装在独立的策略类中,可以避免在客户端代码中使用大量的 if-else 或 switch 语句来选择算法,从而提高代码的可读性和可维护性。
提高扩展性:当需要添加新的算法时,只需要新增一个策略类实现策略接口即可,无需修改原有的代码,符合开闭原则(对扩展开放,对修改关闭)。
算法的可重用性:策略模式中的算法被封装在独立的类中,可以被多个客户端重复使用,提高了算法的可重用性。
算法的保密性和安全性:客户端只需要知道策略接口,而不需要知道具体的算法实现,这在一定程度上提高了算法的保密性和安全性。
缺点
客户端必须了解所有策略:客户端必须知道所 ...
【设计模式】建造者模式
参考链接:建造者(Builder)模式
1. 设计意图及特点建造者(Builder)模式的定义:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
一句话概括: 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的意图是为了构造对象,因此它属于创建型模式。
例如对一个迷宫可能有墙、房间和门,并且数量不计。迷宫可能仅由一堵墙构成,也可能由两堵墙构成,也可能由两个房间加一扇门构成…如果采用重载的方式生产迷宫,代码量是难以计数的、无比庞大的。
针对一个对象拥有大量的组件(迷宫可以拥有很多墙或房间或门),而构造这个对象对其组件的使用又是不确定的这一问题(使用墙、房间、门的数量是不确定的),想要精细的控制构建过程,此时可以采用建造者模式解决问题。
优点
封装性良好,构建和表示分离。
扩展性比较好,各个具体的建造者相互独立,有利于系统的解耦。
客户端没必要知道产品内 ...
【设计模式】工厂模式
0. 工厂模式简介【工厂模式】属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。这样可以提高代码的可维护性和可扩展性。
工厂模式定义:定义了一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的 “创建与使用相分离” 的特点。
PS:工厂模式适用于生成复杂对象的场景。如果对象较为简单,通过 new 即可完成创建,则不必使用工厂模式。使用工厂模式会引入一个工厂类,增加系统复杂度。
工厂模式有三种,分别是简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method Pattern)和抽象工程模式(Abstract Factory Pattern),本文将对其逐一进行介绍。
1. 简单工厂模式【简单工厂模式】,又叫做静态工厂模式(Static Factory Method),由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。简单工 ...
二分查找
本文主要对几种不同版本的二分查找进行简要介绍。
Redis实战篇
本文结合Redis在真实项目中的使用案例,介绍了Redis的共享session应用、缓存雪崩、缓存穿透、Lua脚本Redis、分布式锁等
安全框架SpringSecurity
本文介绍了SpringBoot中SpringSecurity认证和授权的使用。