- 博客(8)
- 资源 (23)
- 收藏
- 关注
原创 java23种设计模式-模版方法模式
定义 定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法结构即可重定义该算法的某些特定步骤。 角色 该设计模式的角色划分较为简单 抽象模版类 具体模版类 抽象模版类又包含了这样几个方法:模版方法,具体方法,抽象方法,勾子方法。 模版方法 决定了算法的实现步骤,该方法中调用了具体方法,待实现的抽象方法,勾子方法等。是算法执行的一个模版。 具体方法...
2018-07-29 15:47:39 176
原创 堆排序(java实现)
说到堆排序不得不说一下堆这种数据结构。这里的堆指二叉堆,本质是一个数组。可看作一个近似的完全二叉树(完全二叉树是所有叶子节点深度相同,且所有内部节点度为二的二叉树)。二叉堆有两种表现形式,最大堆和最小堆。最大堆中最大元素在二叉树的根结点,最小堆正好相反。我们的目的就是利用最大堆的特点,完成排序。 先上一段调试好的代码 package algorithms.portion6.heap; /*...
2018-07-26 23:30:44 116
原创 java23种设计模式—观察者模式
定义 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它大所有依赖者都会收到通知并自动更新。 角色 观察者模式主要包含的角色为抽象观察者,抽象主题,以及它们各自具体的实现。 推模型 推模型是一种主题对象状态发生变化时主动推送信息给所有观察者的模型,无论是否需要,被注册的观察者只能被动地接受改变。 抽象主题 /** * Create...
2018-07-22 19:51:44 162
原创 最大子数组问题的两种解法
所谓最大子数组就是连续的若干数组元素,如果其和是最大的,那么这个子数组就称为该数组的最大子数组。最大子数组是很多问题的抽象,比如购买股票。如果把相邻两天的股价之差作为数组元素,那么求在连续的某个时间段内买入股票的最佳时间和卖出股票的最佳时间就可以抽象为计算最大子数组的问题。下面分别介绍两种算法求解最大子数组问题,算法思想均来自算法导论这本程序员的圣经。 分治法 分治法实现思路比较简单。如果把一...
2018-07-20 22:34:29 7933 1
原创 java两种实用的排序(插入排序、归并排序)
插入排序 插入排序是多种较为实用的排序方法之一。很多更高效的排序,当输入规模降低到一定程度就会切换到插入排序,因为在局部有序并且规模较小的情况下,插入排序非常高效。以下为代码实现。 /** * Created by tiantian on 2018/7/9. */ public class InsertSort { public static void sort(Int...
2018-07-15 23:54:56 2901 1
原创 java23种设计模式—策略模式
策略模式是一种行为型设计模式,维基百科解释如下行为型设计模式:行为型设计模式是设计模式都一种,用来识别对象之间的常用交流模式并加以实现。如此可在进行这些交流活动时增强弹性。由此可以看出,行为型设计模式关注的是对象之间的通讯行为。定义策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法都变化独立于使用算法都客户。角色分类 1.抽象策略接口 2.具体策略类 3.环境类UML图:常...
2018-07-14 20:42:13 3046
原创 java23种设计模式—原型模式
原型模式也属于创建型模式。简言之,就是如何复制一个对象的设计模式。创建对象的方式有很多种,对java而言,可以在JVM堆中new一个,也可以通过反射、序列化,又或者相应的对象工厂也可以代劳。我们关注的点是,创建对象的开销。当创建一个对象的消耗比较大的时候,使用原型模式可以很高效的创建对象。在java中顶层对象Object提供了clone()方法,只要我们正确的实现Cloneable接口的clone...
2018-07-07 18:42:56 2847
原创 java23种设计模式—单例模式的几种实现
饿汉式 该方式创建的单例对象天生具有线程安全特性。原因很简单,JVM类加载器初次加载类的时候就创建了对象。实现起来也比较简单,只有一个地方需要注意,就是构造器要设计为private以防止类外部创建对象。 /** * Created by tiantian on 2018/6/29. */ public class HungrySingleTon { private s...
2018-07-01 01:02:52 2889
人工智能书籍(淘宝购买)多本打包
2017-09-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人