导图社区 设计模式
设计模式可以提高代码的可读性,增加代码的重用性,保证代码的可扩展性,设计模式提供了一个帮助定义系统架构的解决方案。
这是一篇关于Mysql的思维导图,包含优化的八种方式:事务,锁定表,使用外键,使用索引等内容。
Nacos 服务注册中心(Nacos Server)介绍,包括Nacos的特性、两大组件、服务提供者、服务消费者四部分。
Redis 远程字典服务,redis是一个使用C语言写成的,开源的高性能key-value非关系缓存数据库。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
设计模式
创建型模式(5种)
单例模式
概念
保证一个类只有一个实例,并且提供一个访问该全局访问点。
应用
应用程序的日志应用
这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
数据库连接池的设计
因为数据库连接是一种数据库资源。
多线程的线程池的设计
这是由于线程池要方便对池中的线程进行控制。
实现
饿汉式
类初始化时,会立即创建该类单例对象,线程天生安全,调用效率高。
懒汉式
类初始化时,不会立即实例化该对象,而是在真正使用该对象的时候才会创建该对象,具备懒加载功能。
静态内部方式
结合力饿汉式和懒汉式各自的优点, 真正需要的时候才会加载,加载类的线程是安全的。
枚举单例
使用枚举实现单例模式,其优点是 实现简单、调用效率高, 枚举本身就是单例,由JVM从根本上提供保障,避免通过反射和反序列化的漏洞,而缺点是没有延迟加载。
双重检测锁方式
因为JVM 重排序的原因,可能会初始化多次,不推荐使用。
工厂方法模式
工厂模式提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑, 并且是通过使用一个共同的接口来指向新创建的对象。
好处
1、工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。
2、利用工厂模式可以降低 程序的 耦合性,为后期的维护修改提供了很大的便利。
3、将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
分类
简单工厂
用来生产同一等级结构中的任意产品。(不支持拓展增加产品)
工厂方法
用来生产同一等级结构中的固定产品。(支持拓展增加产品)
抽象工厂
用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)
原型模式
抽象工厂模式
建造者模式
结构型模式(7种)
代理模式
代理模式通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理,甚至添加新功能。(AOP 的实现原理)
Spring AOP 、日志打印、异常处理、 事务控制、权限控制
静态代理
简单代理模式,是动态代理的理论基础,也是常见使用在代理模式。
JDK动态代理
使用反射完成代理,需要有顶层接口才能使用,常见是Mybatis 的mapper 文件。
cglib动态代理
也是是用反射完成代理,使用字节码技术,可以直接代理类, 有个缺点就是不能对final类进行继承。
适配器模式
桥接模式
装饰者模式
外观模式
也被叫作 门面模式,用于隐藏系统的复杂性, 并向客户端提供了一个客户端可以访问系统的接口。
享元模式
组合模式
行为型模式(11种)
策略模式
策略模式定义了一系列的算法或业务逻辑操作, 并将每一个算法、逻辑、操作封装 起来,而且使它们还可以相互替换。
模板方法模式
一个操作中的业务处理 逻辑骨架(父类),而将一些步骤延迟到子类中。使得子类可以不改变一个操作的结构来重定义该操作逻辑的实现。
实现一些操作时,整体步骤很固定,但是其中一小部分需要改变,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
例子
去餐厅吃饭时,餐厅给我们提供了一个模板就是:看菜单,点菜,付款,走人。 这里的点菜和付款是不确定的,需要由子类来完成的,其他的则是一个模块。
命令模式
职责链模式
状态模式
观察者模式
又叫发布-订阅模式。其定义 对象之间一种 一 对 多 的依赖关系, 使得当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
中介模式
迭代器模式
访问者模式
备忘录模式
解释器模式
J2EE模式
MVC
DAO
前端控制器
拦截过滤器
传输对象
使用设计模式的好处?
设计模式可以在多个项目中重用。
设计模式提供了一个帮助定义系统架构的解决方案。
设计模式吸收了软件工程的经验。
设计模式为应用程序的设计提供了透明性。
设计模式是被实践证明切实有效的。由于它们是建立在专家软件开发人员的知识和经验之上。
什么是设计模式?
可以提高代码的可读性, 增加代码的重用性, 保证代码的可扩展性
设计模式是一种抽象的编程思想,并不局限于某一特定的编程语言。
软件设计原则(6)
开闭原则
里氏代换原则
依赖倒转原则
迪米特法则
合成复用原则