导图社区 设计模式思维导图
设计模式思维导图,设计模式有三种类型:创建型模式、结构性模式和行为模式。每个模式都做了详细的说明,大家可以看下。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
设计模式
三种类型
创建型模式
单例模式
饿汉式
静态常量
1、构造器私有化(防止 new 对象)
2、类内部创建静态对象
3、对外提供一个静态的公共方法 getInstance
静态代码块
1、私有化构造器(防止new对象)
2、对象的创建放入静态代码块中
3、对外提供一个静态的公共方法getInstance
优点:类装载的时候完成实例化,避免线程同步问题缺点:没有达到lazy loading效果,类被状态可能是很多原因导致的结论:单例模式可以使用,但是造成内存浪费
懒汉式
线程不安全
优点:起到了lazy loading的效果缺点:只能在单线程下使用,多线程同时进入if判断中,就创建了多个对象结论:实际开发中不要使用这种模式
1、私有化构造器
2、对外提供一个静态公共方法getInstance
3、判断实例是否存在
不存在,就new一个实例
存在,就返回实例
线程安全,同步方法
优点:解决了线程安全问题缺点:效率比较低,每次获取实例,都需要同步,实际上获取一次就可以,以后获取直接return就可以结论:实际开发过程中不建议使用
懒汉式(线程不安全)与懒汉式(线程安全,同步)的区别是,懒汉式(线程安全,同步)在getInstance方法中加入了synchronized关键字
线程安全,同步代码块
对线程安全同步方法的改进,改进为同步代码块但是又会造成线程不安全结论:不能使用这种方式
其实也属于线程不安全,在if判断时,跟线程不安全的情况是一样的
双重检查
2、对外提供一个公共的静态方法getInstance
3、在静态方法内进行双if判断,在第二次if判断外层加入synchronized关键字
解决了线程安全问题,实现了懒加载lazy loading同时解决了效率问题实际开发过程中推荐使用这种模式创建单例
静态内部类
2、创建静态内部类
3、静态内部类中有主类的静态实例化
4、对外提供一个公共的静态方法getInstance
3、对外静态方法中返回静态内部来的静态常量
采用类装载机制来保证初始化实例时只有一个线程静态内部类在主类初始化时,并不会立即实例化类的静态属性只会在第一次加载类的时候进行初始化避免了线程不安全,利用静态内部类的特点实现了懒加载lazy loading,同时效率高结论:推荐使用
枚举
借助JDK1.5中添加的枚举来实现单例模式,不仅能够避免多线程同步问题,而且还能防止反序列化重新创建新的对象结论:推荐使用
JVM在装载类的时候是线程安全的1、单例模式保证了系统内存中只存在一个对象,节省了系统资源,对于一些需要频繁销毁的对象,使用单例模式可以提高系统性能;2、当想实例化一个单例类的时候,必须使用相应的获取对象的方法,而不是使用new对象;3、单例模式使用场景:需要频繁的进行创建和销毁对象、创建对象时耗时过多或者耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源,session工厂等)
原型模式
克隆羊解决问题
利用实体类中重写clone方法
浅拷贝
默认使用的clone方法
基本数据类型的属性,会复制一份给拷贝对象
引用类型的属性,只是将该成员的引用值复制给拷贝对象,未进行真正的拷贝
深拷贝
复制对象的所有基本数据类型的成员变量值
为所有引用类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。也就是说,对对象进行深拷贝,需要对整个对象进行拷贝;
重写clone方法实现深拷贝
通过对象的序列化实现深拷贝
1、创建新的对象比较复杂时,可以利用原型模式简化对象创建过程,同时也能提高效率;2、不用重新初始化对象,而是动态地获得对象运行时的状态;3、如果原始对象发生变化(增加或者减少属性),其他克隆对象的也会发生相应的变化,无需修改代码;4、在实现深度克隆时候,可能需要比较复杂的代码;缺点:需要为每一个类配备一个克隆方法,对全新的类来说不是很难,但是对已存在的类进行改造时,需要修改器源代码,违背了OCP原则。
工厂模式
简单工厂模式
工厂方法模式
抽象工厂模式
简单工厂和工厂方法结合
1、将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系解耦。从而提高项目的扩展性和可维护性;2、设计模式的依赖抽象原则;3、不要让类继承具体类,而是继承抽象类或者实现接口;4、不要覆盖基类中已经实现的方法。
结构性模式
适配器模式
桥接模式
装饰模式
组合模式
外观模式
享元模式
代理模式
行为模式
模板方法模式
命令模式
访问者模式
迭代器模式
观察者模式
中介者模式
备忘录模式
解释器模式(Interpreter模式)
状态模式
策略模式
职责链模式(责任链模式)