概念: 将一个复杂对象的构建与它的表示分离.使得同样构建过程可以创建不同表示适用场景: 一个对象有很多属性的情况下 想把复杂的对象创建和使用分离 优点: 封装性好,扩展性好 详解: 工厂模式注重把这个产品创造出来即可,而建造者更关心创建的细节,当创建一个对象需要使用很多步骤去完成的时候,我们可以考虑建造者模式,当创建一个对象比较简单的时候,我们就可以使用工厂模式.通俗一点来理解,建造者模式更像是专门定做一个东西,还是拿上篇博客的例子来说,iterator()作为一个工厂方法,它是可以有不同的厂家…
前言: 在我们还没学习框架之前,肯定都学过JDBC.百度百科对JDBC是这样介绍的[JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名.]通过JDBC我们可以完成Java对关系型数据库的SQL操作.下面我们介绍的这种模式是J…
定义: 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.不需要知道任何创建的细节,不调用构造函数适用场景: 类初始化的时候消耗较多资源 new产生的对象需要非常繁琐的过程 构造函数比较复杂 循环体中产生大量对象 详解: 接下来我们分下面几部分讲解: 原型模式的核心 深克隆和浅克隆 JDK源码分析 1.原型模式的核心 其实很简单,就是实现Cloneable接口,然后重写clone()方法.上面我们已经说过 ,当你在上面的适用场景中的时候,按照我们平常的办法来说肯定是直接new对象出…
前言: 相信很多人都听过一个问题:把大象关进冰箱门,需要几步? 第一,把冰箱门打开:第二,把大象放进去:第三,把冰箱门关上.我们可以看见,这个问题的答案回答的很有步骤.接下来我们介绍一种设计模式--模板方法模式,你会发现,它与这个问题的答案实际上有很多共同之处. 一.定义 定义一个算法骨架,允许子类为一个或多个步骤提供实现.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤. 二.适用场景 一次性实现一个算法的不变的部分,将可变的行为留给子类实现 也就是将各子类中公共行为被提取…
前言: Iterator翻译过来就是迭代器的意思.在前面的工厂模式中就介绍过了iterator,不过当时介绍的是方法,现在从Iterator接口的设计来看,似乎又是一种设计模式,下面我们就来讲讲迭代器模式到底是怎么实现的. 一.定义 提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示.(可以理解为遍历) 二.适用场景 1.访问一个集合对象的内容而无需暴露它的内部表示 2.为遍历不同的集合结构提供一个统一的接口 重要的是对第二点的理解,前面我们在工厂方法中讲过iterato…
前言: 现在电商已经成为我们生活中不可或缺的购物渠道,同时各大商家会针对不同的时间做出不同的折扣,这在我们看来就是一种营销手段,也是一种策略,今天我们就来讲讲JDK中的策略模式是怎么样的. 一.定义 定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户.可以用来消除大量的if...else结构. 二.适用场景 1.系统有很多类,它们的区别仅在于它们的行为不同 2.一个系统需要动态的在几种算法中选择一种 在这里稍微理解一下,策略模式其实和工厂模式很像,不…
前言: 相信大家都打开过层级很多很多的文件夹.如果把第一个文件夹看作是树的根节点的话,下面的子文件夹就可以看作一个子节点.不过最终我们寻找的还是文件夹中的文件,文件可以看做是叶子节点.下面我们介绍一种模式,与这种树级结构息息相关.当然,今天的主角是HashMap.接下来我们一起来看HashMap中到底是怎么跟树级结构进行挂钩的. 一.定义 将对象组合成树形结构以表示“部分-整体”的一个层次结构,使客户端对单个对象和组合对象保持一致的方式处理. 二.适用场景 1.客户端可以忽略组合对象与单个对象的…
定义: 保证一个类仅有一个实例,并提供一个全局访问点 适用场景: 确保任何情况下这个对象只有一个实例 详解: 私有构造器 单利模式中的线程安全+延时加载 序列化和反序列化安全, 防止反射攻击 结合JDK源码分析设计模式 1.私有构造器: 将本类的构造器私有化,其实这是单例的一个非常重要的步骤,没有这个步骤,可以说你的就不是单例模式.这个步骤其实是防止外部函数在new的时候能构造出来新的对象,我们说单例要保证一个类只有一个实例,如果外部能new新的对象,那我们单例就是失败的.所以无论什么时候一定要…
三种工厂模式的详解: 简单工厂模式: 适用场景:工厂类负责创建的对象较少,客户端只关心传入工厂类的参数,对于如何创建对象的逻辑不关心 缺点:如果要新加产品,就需要修改工厂类的判断逻辑,违背软件设计中的开闭原则,且产品类多的话,就会使得简单工厂类比较复杂 在jdk源码中的具体实例(注意看代码中的中文注释) private static Calendar createCalendar(TimeZone zone,Locale aLocale) { CalendarProvider provider…
前言 在说享元模式之前,你一定见到过这样的面试题 public class Test { public static void main(String[] args) { Integer a=Integer.valueOf(127); Integer b=new Integer(127); System.out.println(a==b); int c=127; System.out.println(a==c); System.out.println(b==c); } } 问你输出结果是什么?有…