暂无个人介绍
能力说明:
精通JVM运行机制,包括类生命、内存模型、垃圾回收及JVM常见参数;能够熟练使用Runnable接口创建线程和使用ExecutorService并发执行任务、识别潜在的死锁线程问题;能够使用Synchronized关键字和atomic包控制线程的执行顺序,使用并行Fork/Join框架;能过开发使用原始版本函数式接口的代码。
暂时未有相关云产品技术能力~
阿里云技能认证
详细说明模板模式即在一个抽象类公开定义了执行它的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行,简单说,模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤
代理模式:为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象,这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ,聊的通俗一点,代理模式的原理就是使用一个代理对象将目标对象包装起来,然后用该代理对象取代目标对象,代理类和被代理类有共同的父类或实现了相同的接口,这样任何对目标对象的操作都可以用代理类代替,代理类内部可以在调用目标对象的实现细节前后添加相应的业务逻辑
享元模式(Flyweight Pattern)也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象 属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式,享即共享,元即对象 常用于系统底层开发,解决系统的性能问题,像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则重新创建
外观模式(Facade Pattern),也叫"门面模式",外观模式为多个复杂的子系统提供一个一致的界面 即通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节
组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,屏蔽了对象系统的层次差异性,使用一致的行为控制不同层次,并且扩展性非常高,可以很方便地增加 树枝节点 和 叶子节点 对象,并对现有类库无侵入,满足“开闭原则”
装饰者模式:在不改变原有对象的基础之上,动态的将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象功能) ,装饰者模式也体现了开闭原则(ocp) 这里提到的动态的将新功能附加到对象和 ocp 原则,在后面的应用实例上会以代码的形式体现
桥接模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责,它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展
适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容 Adapter 适配器设计模式中有 3 个重要角色: 被适配者 Adaptee,适配器 Adapter 和目标对象 Target 从用户的角度看不到被适配者,是解耦的 用户调用适配器转化出来的目标对象方法,适配器再调用被适配者的相关接口方法 用户收到反馈结果,感觉只是和目标对象交互 ,类图如下所示
建造者模式可以更加精细地控制产品的创建过程 ,将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,方便使用程序来控制创建过程以及顺序,增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符 合“开闭原则”
本章内容,我们对原型模式进行深入一点的讨论,我们来聊聊深拷贝和浅拷贝
原型模式大体上有两种使用场景 一,在需要一个类的大量对象的时候,使用原型模式是最佳选择,因为原型模式是在内存中对这个对象进行拷贝,要比直接new这个对象性能要好很多,在这种情况下,需要的对象越多,原型模式体现出的优点越明显 二,如果一个对象的初始化需要很多其他对象的数据准备或其他资源的繁琐计算,那么可以使用原型模式拷贝
其实抽象工厂模式代码层面并不难,重点在于分析过程和类图的关系要清晰,其实这两种方式差别是有的,但是不大,核心思想大同小异,抽象工厂模式只不过把工厂抽象成了两层,而简单工厂模式就是一个工厂类,但是大多数情况下,一个工厂类很难满足复杂业务逻辑下多种不同类型的实例的创建,这个时候,使用抽象工厂模式搭建,会更显得得心应手,所以,虽然工厂模式有三种,但是大家要根据实际情况灵活运用,切忌不要为了用而用
工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题,首先完全符合开闭原则,实现了可扩展,其次更复杂的层次结构,可以应用于产品结果复杂的场合
简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为,在简单工厂模式中,可以根据参数的不同返回不同类的实例 在软件开发中,当我们涉及到大量的创建某种或者某类对象时,就会使用到工厂模式,你只需要使用工厂对象来需创建对象即可,具体的创建细节被工厂对象封装起来
本章节的重点是单例模式最后两种写法,静态内部类和枚举,接着带大家阅读JDK源码中单例模式的应用,以及对单例模式的注意事项进行总结
本章内容,我们把重点放在单例模式的实现方式 - 双重检查机制,他的写法分析,可能存在的问题和解决方案,同时会对volatile,线程切换相关的知识进行扩展
接下来我们来聊聊单例模式的八种实现方式,如下所示 > 饿汉式(静态常量) > 饿汉式(静态代码块) > 懒汉式(线程不安全) > 懒汉式(线程安全,同步方法) > 懒汉式(线程安全,同步代码块) > 双重检查 > 静态内部类 > 枚举方式
本章节重点需要大家掌握的是类图,上面提到,类图是描述类与类之间的关系的,同时也是 UML 图中最核心的,在讲解设计模式时,我们必然会使用类图,为了小伙伴们在听设计模式的时候不会带着朦胧,所以我们来带着大家画类图,以及梳理类的六大关系
其实设计原则总结起来,都是围绕着下面的三点,这里列举出来,大家结合设计原则的概念,加深理解,还是那句话,遵循设计原则,让程序呈现出高内聚,低耦合的特性 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 针对接口编程,而不是针对实现编程 为了交互对象的松耦合设计而努力
正确使用迪米特法则是可以让程序保证低耦合的,因为避免了与非直接的朋友通信,但是想要通信,就需要用到直接的朋友, 过分的使用迪米特原则,会产生很多这样没有必要的直接的朋友,导致系统复杂度变大,所以,在釆用迪米特法则时要进行权衡,保证系统的结构清晰
开闭原则是最基础的设计原则,其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的工具和方法,而开闭原则才是其精神领袖。依照java语言的称谓,开闭原则是抽象类,而其它的五个原则是具体的实现类
在我们做系统设计时,经常会设计接口或抽象类,然后由子类来实现抽象方法,这里使用的其实也是里氏替换原则,子类可以实现父类的抽象方法很好理解,事实上,子类也必须完全实现父类的抽象方法,哪怕写一个空方法,否则会编译报错,里氏替换原则的关键点在于不能覆盖父类的非抽象方法,这是他着重强调的
依赖倒置原则的核心就是面向抽象(抽象类或者接口)编程,大家要明白,以抽象为基准搭建起来的架构比以细节为基准搭建的架构要稳定的多,因此,在拿到需求之后,要先顶层再细节的方式来进行代码设计
接口隔离原则就是当我一个类通过接口依赖(使用)另一个类的时候,要保证依赖的该接口是最小的,接口里面有方法用不到的,就进行隔离,而隔离的做法就是,就对原来接口进行拆分,拆分为最小粒度,来避免耦合
通过上面两种方案,大家可以看到,方案一,类级别遵守了单一职责原则,但是改动的代价很高,方案二方法级别遵守了单一职责原则,改动幅度较小,综上所述,单一职责原则最核心的其实就是各司其职
【第一】,使用设计模式可以让软件(程序)具有更好的代码重用性,可读性,可扩展性,可靠性,让你的代码逻辑清晰,通俗来说,可以让你的代码更加优雅,可以让程序呈现出高内聚,低耦合的特性 【其次】,成熟框架的源码里大量的用到了设计模式,如果掌握设计模式,对于阅读源码会有很大的帮助,而很多实际生产中的疑难杂症,其实很多时候都需要你通过源码层面去看到底是怎么写的,去反推,来解决实际问题,这就要求你很高的源码阅读能力,如果你要深入阅读源码,你懂设计模式再看的话,很多地方会非常清晰 【第三】,设计模式也是对系统进行合理重构的指南针