设计模式

作者: go_2021 | 来源:发表于2021-12-12 18:37 被阅读0次
创建型
  1. 工厂
    作用:解耦代码
    代码的解耦 一个对象我要实现单例 简单的是在这个类 中把构造方法 设置为private 然后在这个类里面 添加一个属性和方法 来返回本类的唯一实例 这就需要在类本身做修改 如果类不能修改 实现单例多例 在加一层工厂类 实例化类的时候 调用不同的工厂类 来创造 单例工厂
    多例工厂 实现了创建类和类本身的解耦.
    简单工厂: 又叫做静态工厂方法(StaticFactory Method)模式 由一个类充当 调用其静态方法 实现对象的创建.

spring中
beanFactory 简单工厂
继承 FactoryBean 是工厂 根据具体是实现类 来初始化类实例

  1. 抽象工厂
    作用:解耦代码
    是围绕一个超级工厂创建其他工厂 工厂上又添加了一层抽象 好比装备 武器 每个等级 对应不同的 装备 武器 装备是个工厂 武器是一个工厂 之上还有个超级工厂 来批量的控制这些工厂

  2. 单例

  3. 建造者
    作用:简化代码 builder().a("a").build()
    jdk中 StringBuilder
    一般定义 bean的时候 可以用 lombok来简化代码 setter getter builder data

  4. 原型
    作用:简化复制类 如果类比较大 复制每个属性都要set那是很繁琐的
    一般我们要完成 类的拷贝
    首先类 要实现 cloneable 接口 重写clone方法 return super.clone();
    在 A a = new A();
    b = a.clone();
    此时b是新创建的一个新的对象 其基本类型 和a保持一致 但引用的对象 是一样的
    这就是 浅拷贝
    实现深拷贝 一般两种方法
    1 序列化 反序列化
    2 重写clone方法 比方说 a类中有 aa子类 aa子类也实现 cloneable 接口 重写clone方法
    重写a clone方法 this.aa = this.aa.clone();

结构型

带翔 室外 桥组装

  1. 代理
    作用:简化资源的占用 一个类只有一个实例
    动态代理 aop 静态代理可以自己写java代码
    spring中
    JdkDynamicAopProxy和Cglib2AopProxy
    为其他对象提供一种代理以控制对这个对象的访问。 从结构上来看和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。 spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。

  2. 享元
    作用:主要用于减少创建对象的数量,以减少内存占用和提高性能。
    java.lang.Integer(其它基本类型包装类(除去Float,Double)也如此,还有BigDecimal)
    Integer.valueOf()方法
    byte,short,int,long,boolean,char的包装型在类加载到JVM时,已经缓存了制定范围的对象引用,因为值的设定使用的是static块或者常量。
    其中char的范围为:0~127;
    boolean的值为true和false;
    其它默认范围都是-127~128。
    其中int的上限127可以调整,这需要调整JVM的参数。
    同时利用了享元模式的还有String这个类,因为生存的每个字符串都是不可变的。

  3. 适配器
    作用:兼容不同的接口
    比方说电脑上 电脑只支持typec的接口
    u盘的接口 显示器的接口 都不能兼容
    添加一个兼容器 电脑调用兼容器的接口 由兼容器来兼容 u盘接口 和显示器接口
    spring中
    Spring实现这一AOP功能有很多种控制器(Controller)
    一种是带@Controller注解的,
    还可以写一个servlet 当做controller,
    所以用适配器做适配,你看看HandlerAdapter有几个子类,每个子类都是适配某一种类型的控制器,有了HandlerAdapter,你只需要调用handle方法
    HandlerAdatper根据Handler规则执行不同的Handler

  4. 外观
    作用:隐藏复杂性 对外提供简单接口

  • tomcat 的RequestFacade类 ResponseFacade类
    https://www.zhihu.com/question/39872707
    request类实现了 sevlet的相关方法 但是也实现catalina的一些方法
    requestFacade包了一层 request类 对应用层暴露了简单的sevlet标准的方法 接口隔离原则
  1. 桥接
    作用:抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化
    比方说 形状
    shape 圆 方
    颜色 绿色 红色
    我可以在圆的类 下创建 红圆 绿圆 子类
    创建的时候 我就直接 new 红圆() 就可以了 但是继承 的关系不够灵活 耦合太高
    用桥接的模式 创建 一个color接口 红 绿 去实现这个类
    在shape构造方法中 把颜色的实例传过来 new 圆(new red())
    形状 和颜色 两个接口 独立开来 互不影响
  2. 组合
    作用: 把类当做树级关系进行管理 比方类中 add方法 是在类中 创建一个 自己类的实例 实现层级关系
  3. 装饰
    作用:不修改原来的代码 扩展类 中增强功能
    spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。基本上都是动态地给一个对象添加一些额外的职责。
    HttpServletRequest 的实现类 是在tomcat 或者 jetty容器里
    然后HttpServletRequestWrap是对功能的 装饰类 需要增强方法 继承实现即可
行为型

北侧叠则放名模 关节中装

  1. 备忘录
  2. 策略
    理解对代理的区别 都是可以进行选择 不同是代理和实现类的 结构 一般是一样的
    而策略 只是对一组算法实现的 封装 比较抽象
    定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
    IoC容器根据bean定义的内容实例化相应bean对象的时候,会根据情况决定使用反射还是使用cglib来实例化相应的对象
  3. 迭代
  4. 责任链
  5. 访问者
  6. 命令
  7. 模板方法
  8. 观察者
    spring中事件驱动 一个listener 是一个接受者
    继承BaseEvent 定义一个事件
    调用 applicationContext.publishEvent 发布事件
    定义观察者 implements ApplicationListener<事件class> 实现onApplicationEvent方法
    可以定义多个 观察者 来监听事件 之后做对应的事情
    定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
    spring中如ApplicationListener。
    通过对 applicationListener的实现 可以监控 spring的事件 比方说 当所有bean初始化之后 用户处理servlet请求后等.
  9. 解释器
  10. 中介
  11. 状态
    允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

参考:https://blog.csdn.net/caoxiaohong1005/article/details/79961539

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

    本文标题:设计模式

    本文链接:https://www.haomeiwen.com/subject/emorfrtx.html