Java设计模式之Template Method模式
学习笔记 : Java设计模式之Template Method模式概述模板设计模式 : 定义一个操作中算法的框架,而将这一些步骤延迟到子类中. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,简单点说既在父类中定义处理流程的框架,在子类中实现具体的处理. ( Template Method Pattern : Define the skeleton of an algorithm in an operation,deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure )
其是一种基于继承的代码复用技术,它是一种行为型模式,当然也是最简单的行为设计模式 ~
模板方法模式的实现分类模板方法模式的实现可划分为 : 模板方法( 基本方法的集合 )和基本方法( 实现具体的逻辑步骤 )
模板方法模板方法是指定义在抽象类中,把基 ...
Java设计模式之Adapter模式
学习笔记 : Java设计模式之Adapter模式概述适配器模式 : 将一个类的接口转换为客户希望的另一个接口. 适配器模式让那些接口不兼容的的类可以在一起工作. Adapter模式也称为Wrapper模式( Adapter Pattern : Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces )
示例程序(使用继承的适配器)首先让我们来看一段使用继承的适配器的示例程序,该简单程序的作用是将一段输入的字符串显示为(hello)或*hello*.
Banner类 : 充当Adaptee角色
1234567891011121314151617181920212223242526package pers.huangyuhui.adapter.adapter1;/** * @project: design-patt ...
Java设计模式之Iterator模式
学习笔记 : Java设计模式之Iterator模式概述迭代器模式 : 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示. 迭代器模式又称( Cursor )模式,它是一种对象行为型模式( Iterator Pattern : Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation )
示例程序-详细版下面是一个实现了Iterator模式的示例程序,其作用是将书籍信息( Book )放到存储书籍信息的书架( BookSelf )上,并将书的名字按顺序显示出来
Book : 图书信息类
1234567891011121314151617181920212223package pers.huangyuhui.iterator;/** * @project: design-patterns * @description: Book信息 * @author: 黄宇辉 * @date: 9 ...
面向对象的设计原则
学习笔记 : 面向对象的设计原则概述软件的可维护性( Maintainability )和可复用性( Reusability )是两个非常重要的用于衡量软件质量的属性,软件的可维护性是指软件能够被理解,改正,适应及扩展的难以程度,软件的可复用性是指软件能够被重复使用的难易程度. 面向对象设计原则也是后续设计模式学习的基础,每一个设计模式都符合某一个或多个面向对象设计原则,面向对象原则是用于评价一个设计模式的使用效果的重要指标之一. 通过在软件中使用这些原则可以提高软件的可维护性和可复用性.
设计模式是在特定环境下为解决某一通用软件设计问题提供的一套制定的解决方案,该方案描述了对象和类之间的相互作用
单一职责原则单一职责原则 : 一个对象应该只包含单一的职责,并且该职责被完整地封在一个类中
Single Responsibility Principle( SRP ) : Every object should have a single responsibility,and that responsibility should be entirely encapsulated by ...
详解Binary Tree的实现方式及其应用
学习笔记 : 详解Binary Tree的实现方式及其应用什么是二叉树如果一棵树中的每个结点有0,1或者2个孩子结点,那么这颗树就称为二叉树. 空树也是一棵有效的二叉树. 一个二叉树可以看作由根节点和两颗不相交的子树( 分别称为左子树和右子树 )组成. 其类型可分为 : 严格二叉树,满二叉树,完全二叉树.
二叉树的应用
编译器中的表达式树
用于数据压缩算法中的赫夫曼编码树
支持在集合中查找,插入和删除,其平均时间复杂度为 O(logn) 的二叉树搜索(或称为查找)树( BST )
优先队列( PQ ),它支持以对数时间( 最坏情况下 )对集合中的最小( 或最大 )数据进行搜索和删除
二叉树的遍历根据实体( 结点 )处理顺序不同,可以定义不同的遍历方法. 其分类如下 :
前序遍历( DLR ) : 根节点 ——> 左子树 ——> 右子树
中序遍历( LDR ) : 左子树 ——> 根节点 ——> 右子树
后序遍历( LRD ) : 左子树 ——> 右子树 ——> 根节点
层次遍历 : 这种方法由图的广度优先遍历方法启发得来
程序实例
定义二叉树的 ...
详解Queue的实现方式及其应用
学习笔记 : 详解Queue的实现方式及其应用什么是队列队列是一种只能在一端插入( 队尾 ),在另外一端删除( 堆首 )的有序线性表. 队列中第一个插入的元素也是第一个被删除的元素. 所以,队列是一种先进先出( FIFO,First In First Out )或后进后出( LILO,Last In Last Out )线性表.
队列的应用
直接相关的应用
操作系统根据( 具有相同优先级的 )任务到达的顺序调度任务( 例如,打印队列 )
模拟现实世界中的队列,如售票柜台前的队伍,或者任何需要先来先服务的场景
多道程序设计
异步数据传输( 文件输入输出,管道,套接字 )
间接相关的应用
作为算法的辅助数据结构
其他数据结构的组件
队列的实现方式队列抽象数据类型( 与栈类似 )有多种实现方式,下面是常用的方法 :
基于简单循环数组的实现方法
基于动态循环数据的实现方法
基于链表的实现方法
简单循环数组的实现方法1234567891011121314151617181920212223242526272829303132333435363738394041424344454 ...
软件工程琐碎知识点
学习笔记 : 软件工程琐碎知识点以下摘自软件工程书籍中各个章节的习题,一些琐碎的知识点而已~
软件工程概述
什么是软件 ?
答 : 计算机软件( Software )是指与计算机系统操作有关的程序,规程,规则及任何与之有关的数据和文档资料.
什么是软件危机 ?
答 : 西方计算机界的科学家把软件开发和维护过程中遇到的一系列严重问题统称为”软件危机”.
什么是软件工程 ? 构成软件工程的要素是什么 ?
答 : 软件工程是指导计算机软件开发和维护的工程学科. 软件工程的方法,工具,过程构成了软件工程的三要素.
过程和声明周期的建模
什么是软件周期生命周期模型 ? 有哪些主要模型 ?
答 : 瀑布模型( waterfall model )也称为软件生命周期模型 : 从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务. 主要软件开发模型有 : 瀑布模型,渐近模型,螺旋模型,增量式开发模型等. . .
什么是软件生存周期 ? 它有哪些活动 ?
答 : 软件开发过程有时被称 ...
使用MyBatis完成通用DAO和通用Service
学习笔记 : 使用MyBatis完成通用DAO和通用Service简介如 UserMapper 里面有 insert(User user) , find(Integer id) ,delete(Integer id) 等方法,则在 Service 中也要有这些方法的实现,假设每个 Mapper 有5个方法,则 Service 也需要有5个方法的实现. 如果有10个实体类, Mapper 可以省略( 可由工具生成 ),但是 Service 需要有这50个方法的实现. 既而后期会导致代码臃肿难以维护,且项目难以扩展哟~ 一般 Java 项目的分层结构图如下所示,详情请参考学习笔记 : Java项目开发中PO,BO,VO,DTO,POJO,DAO的概念及其作用
通用的DAO接口1234567891011121314151617181920212223242526272829303132package pers.huangyuhui.memo.dao;import java.io.Serializable;import java.util.List;/** * @project: mem ...
详解JDK 11中的新特性
学习笔记 : 详解JDK 11中的新特性北京时间2018年9月26日,Oracle官方宣布 Java11 正式发布,这是 Java 大版本周期变化的第一个长期支持版本,非常值得关注. 从官网既可下载,最新发布的 Java11 将带来 ZGC, Http Client 等重要特性,一共包含17个 JEP (JDK Enhancement Proposals,既 JDK 增强方案提议), 其内容如下所示,更多详细信息请参阅 : http://openjdk.java.net/projects/jdk/11/
181: Nest-Based Access Control (嵌套类可见性控制)
309: Dynamic Class-File Constants (动态文件常量)
315: Improve Aarch64 Intrinsics (改进Aarch64 Intrinsics)
318: Epsilon: A No-Op Garbage Collector (Epsilon:一个无操作的垃圾收集器)
320: Remove the Java EE and CORBA Modules ...
详解JDK 10中的新特性
学习笔记 : 详解JDK 10中的新特性2018年3月21日,Oracle官方宣布 Java10 正式发布. 需要注意的是 Java9 和 Java19 都不是 LTS( Long-Term-Support )版本,和过去的 Java 大版本升级不同,这两个只有两年半左右的开发和维护期. 而 Java11,也就是18.9LTS,才是继 Java8 之后的第一个 LTS 版本. JDK10 中一共定义了109个新特性,其中包含12个 JEP,还有一些新 API 和 JVM 规范以及 Java 语言规范上的改动,JDK10 的12个 JEP( JDK Enhancement Proposal 特性加强提议 )如下所示,更多信息请参阅官方文档 : http://openjdk.java.net/projects/jdk/10/
Local-Variable Type Inference (主要重点:局部变量类型推断)
Consolidate the JDK Forest into a Single Repository (JDK库的合并)
Garbage-Collector Interfa ...