23种设计模式
文章平均质量分 57
一只小小狗
大家好我是练习时长2年半的程序员
展开
-
Spring中的Controller和Service还有Dao,包括各种各样的Bean是线程安全的吗?我们应该怎么选择单例还是多例,如果单例好我们如何保存用户内数据
Spring中的Controller和Service还有Dao,包括各种各样的Bean默认情况下是线程安全的吗?先丢出结论:不是线程安全一.Spring bean作用域(scope)范围是二.百分之90的web项目都是使用默认单例,这样不会引起线程安全问题么?三.单例Bean,实际上分为有状态和无状态,3.1 无状态bean3.2 有状态bean四.我们都知道单例的bean比较好,我们这时候怎么在存储用户数据的情况下,使用单例模式呢?使用ThreadLocal对象存储用户信息先丢出结论:不是线程安全原创 2022-05-17 17:57:24 · 314 阅读 · 0 评论 -
模板模式:复用和扩展
模板模式:复用和扩展复用和扩展使用钩子,进行控制操作模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。这里的算法是指“业务逻辑”,这个“算法”骨架或者流程就是模板。复用和扩展比如在一个星巴克流程中,1)热水 2)冲泡(咖啡or茶) 3) 装入杯中 4)加入小料这是一个固定的流程,全国都是按照这个流程去制作。public abstract class XBK{ public final原创 2022-05-16 18:02:06 · 173 阅读 · 0 评论 -
IS-A HAS-A 的关系区别
IS-A继承关系 (是一个)在OOP中,IS - 关系是完全继承的。这意味着,子类是一种父类。例如,苹果是一种水果。所以你会延长水果来获得苹果。class Apple extends Fruit{...}HAS-A组合关系 (有一个)另一方面,组合意味着创建具有对其他对象的引用的实例。例如,一个房间有一张桌子。因此,您将创建一个教室,然后在该类中创建一个类型为table的实例。class Room{ Table table = new Table ();}...原创 2021-03-21 18:34:12 · 202 阅读 · 0 评论 -
消除if...else(2.职责链模式)
适用场景条件表达式灵活多变,没有统一的形式。实现与示例职责链的模式在开源框架的 Filter、Interceptor 功能的实现中可以见到很多。public void handle(request) { if (handlerA.canHandle(request)) { handlerA.handleRequest(request); } else if (handlerB.canHandle(request)) { handlerB.handleR原创 2021-10-27 14:08:49 · 235 阅读 · 0 评论 -
消除if...else(1.表驱动)
问题一:if…else 过多问题表现if…else 过多的代码可以抽象为下面这段代码。其中只列出5个逻辑分支,但实际工作中,能见到一个方法包含10个、20个甚至更多的逻辑分支的情况。另外,if…else 过多通常会伴随着另两个问题:逻辑表达式复杂和 if…else 嵌套过深。if (condition1) { if(cod){ }else if(cod2){ if(cod){ }else if(cod2){ if(cod){ }else if(cod2){原创 2021-10-25 18:07:11 · 246 阅读 · 0 评论 -
装饰器模式
装饰器模式什么是装饰器模式经典案例 java.io包下 字符流字节流。优点缺点奶茶店 案例UML类图Beverage 组件类(Component)Decaf 被装饰者(decorated)Mike Soy 装饰类(decorator)测试类什么是装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供原创 2021-03-31 15:39:01 · 142 阅读 · 0 评论 -
观察者模式 (Java内置观察者模式以及扩展)
观察者模式什么是观察者模式优点:缺点:公众号 实例UML图Observable 被观察者WeatherData 具体被观察者Observer 观察者接口DisplayElement接口 对观察者的行为进行扩展GeneralDisplay 具体观察者测试类随之而来的问题如何解决?如何扩展 `加一层`(这是我的想法,不对可以指出)什么是观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。原创 2021-03-30 19:35:07 · 331 阅读 · 0 评论 -
java 8 io字节流、字符流继承关系
1、字节输入流2、字节输出流3、字符输入流4、字符输出流原创 2021-03-30 15:57:42 · 806 阅读 · 0 评论 -
策略模式
策略模式意图优点缺点注意事项案例鸭子模拟器Duck 类ModelDuck 类FlyBehavior 接口FlyRocketPowered 类FlyNoWay 类QuackBehavior 接口MuteQuack 类Quack 类Test案例UML图首先我先陈述2个观点:如何解决?意图定义一系列算法,把他们一个一个封装起来,并且可以相互替换。优点1. 算法可以自由切换。2. 避免使用多重条件判断。3. 扩展性良好。缺点1. 策略类会增多。2. 所有策略类都需要对外暴露。注意事原创 2021-03-22 19:52:13 · 141 阅读 · 0 评论 -
单例模式
单例模式1.饿汉式2.懒汉式2.1反射破坏单例2.2改良懒汉式单例 (三重检测)2.3改良单例信号灯法2.4破坏单例信号灯3.使用枚举 保护单例模式(防止反射攻击)3.1为什么枚举可以保护 单例模式?3.2 枚举创建单例3.3查看底层 反编译3.4 使用jad.exe4.总结饿汉式 DCL懒汉式1.饿汉式package JUC;/** * 饿汉式 浪费内存 */public class SingletonHungry { private byte[] data1 = new byte[原创 2021-01-23 17:01:48 · 179 阅读 · 4 评论