设计模式学习笔记(五):工厂方法模式

1 前言尽管简单工厂模式实现了对象的创建和使用分离,但是仍然存在以下两个问题:工厂类过于庞大,包含了大量的判断代码,导致维护和测试难度增大系统扩展不灵活,如果增加了新的产品类型,必须修改静态工厂方法的业务逻辑,违反了开闭原则具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性一个更好的办法是使用工厂方法模式。2 工厂方法模式工厂方法模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法让一个类的实例化延迟到其子类。工厂方法模式又简称工厂模式或虚拟构造器模式或多态
分类: 其他 发布时间: 08-05 22:58 阅读次数: 0

设计模式学习笔记(六):抽象工厂模式

1 相关术语在了解抽象工厂模式之前,首先来了解一下两个术语:产品等级结构产品族1.1 产品等级结构产品等级结构也就是产品的继承结构,例如一个抽象类是电视机,子类有不同品牌的电视机,比如海尔电视机,海信电视机,TCL电视机,而抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是子类。1.2 产品族产品族是指由一个同一个工厂产生的位于不同产品等级结构中的一组产品,例如海尔电器工厂生产的海尔电视机,海尔电冰箱。海尔电视机位于电视机产品等级结构中,海尔电冰
分类: 其他 发布时间: 08-05 22:58 阅读次数: 0

设计模式学习笔记(七):原型模式

1 定义原型模式:使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式的工作原理很简单,将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象克隆自己来实现创建过程。原型模式是一种另类的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法实现。通过克隆方法创建的对象是全新的对象,它们在内存中拥有新的地址,通常对克隆多产生的对象进行的修改不会对原型对象造成任何的影响,每一个克隆的对象都是相互独立的,通过不同的方式对克
分类: 其他 发布时间: 08-05 22:58 阅读次数: 0

设计模式学习笔记(八):建造者模式

1 建造者模式1.1 定义建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需的建造者类型即可。建造者模式关注一步一步地创建一个复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。1.2 复杂_public adsitemsimplelistrequest(builder builder) { this.customerid = builder
分类: 其他 发布时间: 08-05 22:58 阅读次数: 0

设计模式学习笔记(十五):代理模式

1 概述1.1 引言1.2 定义1.3 结构图1.4 角色1.5 分类2 典型实现2.1 步骤2.2 抽象主题角色2.3 代理主题角色2.4 真实主题角色3 实例4 远程代理5 虚拟代理6 Java动态代理6.1 Proxy6.2 InvocationHandler7 主要优点8 主要缺点9 适用场景10 总结...
分类: 其他 发布时间: 08-05 22:55 阅读次数: 0

设计模式学习笔记(十六):职责链模式

1 概述1.1 引言1.2 定义1.3 结构图1.4 角色2 典型实现2.1 步骤2.2 抽象处理者2.3 具体处理者3 实例4 分类4.1 纯的职责链模式4.2 不纯的职责链模式5 主要优点6 主要缺点7 适用场景8 总结
分类: 其他 发布时间: 08-05 22:55 阅读次数: 0

设计模式学习笔记(十七):命令模式

1 概述1.1 引言1.2 定义1.3 结构图1.4 角色2 典型实现2.1 步骤2.2 抽象命令类2.3 具体命令类2.4 调用者2.5 接收者3 实例4 命令队列5 撤销操作6 请求日志7 宏命令8 主要优点9 主要缺点10 适用场景11 总结...
分类: 其他 发布时间: 08-05 22:55 阅读次数: 0

设计模式学习笔记(十八):解释器模式

1 概述1.1 引言1.2 相关术语1.2.1 文法规则1.2.2 抽象语法树1.3 定义1.4 结构图1.5 角色2 典型实现2.1 步骤2.2 抽象表达式2.3 终结符表达式2.4 非终结符表达式2.5 环境类3 实例4 环境类5 主要优点6 主要缺点7 适用场景8 总结...
分类: 其他 发布时间: 08-05 22:54 阅读次数: 0

设计模式学习笔记(十九):迭代器模式

1 概述1.1 引言1.2 定义1.3 结构图1.4 角色2 典型实现2.1 步骤2.2 抽象迭代器2.3 具体迭代器2.4 抽象聚合类2.5 具体聚合类3 实例4 内部类实现5 JDK迭代器6 主要优点7 主要缺点8 适用场景9 总结...
分类: 其他 发布时间: 08-05 22:54 阅读次数: 0

设计模式学习笔记(二十):中介者模式

1 概述1.1 引言1.2 定义1.3 结构图1.4 角色2 典型实现2.1 步骤2.2 抽象中介者2.3 具体中介者2.4 抽象同事类2.5 具体同事类3 实例4 扩展中介者与同事类5 主要优点6 主要缺点7 适用场景8 总结
分类: 其他 发布时间: 08-05 22:54 阅读次数: 0

设计模式学习笔记(二十一):备忘录模式

1 概述1.1 引言1.2 定义1.3 结构图1.4 角色2 典型实现2.1 步骤2.2 原发器2.3 备忘录2.4 负责人3 实例4 多次撤销5 有关封装6 主要优点7 主要缺点8 适用场景9 总结
分类: 其他 发布时间: 08-05 22:54 阅读次数: 0

[JVM学习之路]一、初识JVM,了解其结构、模型及生命周期

JVM入门简介一、JVM位置JVM是运行在操作系统之上的,与硬件之间没有直接的联系二、JVM的整体结构方法区和堆是所有线程所共享Java栈(jvm虚拟机栈)、本地方法栈和程序计数器是运行时每个线程所独立拥有的三、JVM的架构模型javap -v #反编译Java编译器的指令是基于栈的指令集架构;另一种是基于寄存器的指令集架构由于不同平台的CPU不同,所以不能设计成基于寄存器的。基于栈优点:​ 1.跨平台​ 2.指令集小,编译器容易实现缺点:​ 1.性能下降,实现同样功能
分类: 其他 发布时间: 08-05 22:53 阅读次数: 0

[JVM学习之路]二、认识类加载子系统,了解类加载过程、类加载器分类和几个重要机制

类加载子系统一、类加载子系统简介类加载器子系统分为三个阶段:加载阶段链接阶段初始化阶段1.类加载子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识(16进制CA TE BA BE);2.ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine来决定3.加载后的Class类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量_java的核心类库都是使用的引导类加载器进行加载的
分类: 其他 发布时间: 08-05 22:53 阅读次数: 0

[算法练习-剑指offer]题15.翻转链表(Java)

题目题号:15题目名:反转链表编程语言Java题目描述输入一个链表,反转链表后,输出新链表的表头。初次思路将最后一个位置定下来,将前面的值逐个插入到最后这个位置的后面比如 12345->2345 1->345 2 1->45 3 2 1-> 5 4 3 2 1解题代码public class Solution { public ListNode ReverseList(ListNode head) { //思路,将前面的结点插到后面来完成
分类: 其他 发布时间: 08-05 22:53 阅读次数: 0

[算法练习-剑指offer]题16.合并两个排序的链表(Java)

题目题号:16题目名:合并两个排序的链表编程语言Java题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。初次思路可以使用额外空间,也可以使用在原地修改的这里使用在原地修改首先定位首位小的为主,大的为副分支,目的是将副分支合并到主分支上双指针遍历主副分支,如果主小于等于副,那么继续遍历,否则将副分支的结点插入,再后移,这里为了处理插入方便,添加一个主分支前置遍历指针解题代码public class Solution { pu
分类: 其他 发布时间: 08-05 22:52 阅读次数: 0

[算法练习-剑指offer]题17.树的子结构(Java)

题目题号:17题目名:树的子结构编程语言Java题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)初次思路可能语文没学好,写牛客上这个剑指offer描述感觉没有力扣上那么好懂,感觉没讲清楚题意,老会错意思,读题半小时写题十分钟然后error这道题的意思是比较一颗数是不是另一颗树的子结构,比较的其实是结构和对应的值,而不是地址树的这类题一般都是用递归,先比较两个点是不是值一样,在比较其左子树,右子树的值是不是一样就行解题代码public
分类: 其他 发布时间: 08-05 22:52 阅读次数: 0

[算法练习-剑指offer]题18.二叉树的镜像(Java)

题目题号:18题目名:二叉树的镜像编程语言Java题目描述操作给定的二叉树,将其变换为源二叉树的镜像。初次思路意思就是翻转二叉树使用递归,交换每个节点的左右子树。直到节点为空说明到了根节点解题代码public class Solution { public void Mirror(TreeNode root) { //非空校验 if(root == null) return ; if(root.left==null&&am
分类: 其他 发布时间: 08-05 22:52 阅读次数: 0

[算法练习-剑指offer]题19.顺时针打印矩阵(Java)

题目题号:19题目名:顺时针打印矩阵编程语言Java题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.初次思路纯数学思路去思考使用while顺时针打印先打印顶部,然后右侧,然后底部,最后左侧,注意位置和边界的变化解题代码public class Solutio
分类: 其他 发布时间: 08-05 22:52 阅读次数: 0

[算法练习-剑指offer]题20.包含min函数的栈(Java)

题目题号:20题目名:包含min函数的栈编程语言Java题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。初次思路题意是要获取栈的最小值,时间复杂度应为O(1),说明可以直接获取值.栈的数据操作类型是FILO,要再设置一个数列来排序有些麻烦,这里不妨使用空间换时间,将要存入栈的值和最小值一起存push的时候直接将对应node和最小值min一起存进去pop就将node和min一块出栈top就是获取栈顶的min下面一个值getm
分类: 其他 发布时间: 08-05 22:51 阅读次数: 0

[Redis入门到精通day01]NoSQL引入redis

Redis入门到精通day01一、NoSQL引入redis1.mysql发展史单机MySQL[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lbeHd038-1595725513595)(D:\\学习笔记\\redis\\imgs\\单机mysql.jpg)]​ 数据访问量不大,单一数据库足以应付访问,大量网站都是静态数据无序动态交互​ 随着发展存在以下问题​ 1、数据量逐渐增多,一个机器放不下​ 2、数据索引(B + Tree)也放不下​ 3、访问
分类: 其他 发布时间: 08-05 22:51 阅读次数: 0