自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

QUAN_A的博客

一个用心学习的菜鸟

  • 博客(33)
  • 收藏
  • 关注

原创 备忘录模式

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态。类图:发起人(游戏角色)public class GameRole { private int vit; private int atk; private int def; public void stateDisplay() { Sy

2017-12-20 10:52:12 265

原创 适配器模式

维基百科在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。球员抽象类public abstract class Player { protected String name; public Pl

2017-12-07 10:13:37 2303 1

原创 建造者模式(生成器模式)

维基百科生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。抽象创建接口public interface PersonBuilder { void buildHead(); void buildBody(); void b

2017-12-06 09:53:21 442

原创 外观模式

百度百科外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。public class Debt { public void buy() { System.out.println("买国债"); } public void sell() { System.out.println("卖

2017-12-06 09:20:22 259

原创 模板方法模式

维基百科模板方法模式定义了一个演算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变演算法架构的情况下,重新定义演算法中的某些步骤。具体来说,模板方法就是提炼出公共的方法步骤,子类只需要关系自己要做的事即可。试卷模板public abstract class Question { //题目,不允许子类修改 public final void question1()

2017-12-05 16:55:28 210

原创 工厂模式

维基百科工厂方法模式(英语:Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”操作对象public class Operation { private

2017-12-05 15:20:55 650

原创 代理模式

百度百科代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。组成:抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真实角色所要实现的业务逻

2017-12-05 11:15:17 197

原创 装饰模式

百度百科装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。在装饰模式中的各个角色有:抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。

2017-12-04 17:38:11 268

原创 策略模式

维基百科:策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 策略模式:定义了一族算法(业务规则);封装了每个算法;这族的算法可互换代替(interchangeable)。定义统一策略接口public interface CashSuper {

2017-12-04 14:09:58 181

原创 简单工厂模式

为什么使用设计模式?在开发中使用设计模式虽然会增加代码量,但是使用设计模式能使得代码更加灵活、可扩展和复用。

2017-12-01 14:23:34 200

原创 归并排序

今天又重新学习了归并排序,感觉跟从来没有看过一样,老了,记性就是不好了。学习算法最重要的就是学习算法的思想,归并采用的是分治、合并的思想,既是把要排序的列表分解成小的待排序的列表,把小的列表排序之后再归并到一起。如要对{6,5,9,14,46,7,10}进行排序,把它分解成{6,5,9,14}和{46,7,10}分别进行排序,然后把{6,5,9,14}分解成{6,5}和{9,14}进行排序,依次类推

2017-11-21 22:01:23 256

原创 堆排序

最近在学习算法,学习过不久之后总会忘得一干二净,但是算法对程序员又很重要,也不得不学啊!昨天重新学习了堆排序,今天花时间重新整理一下思路。预备知识 堆排序是通过二叉堆实现的,堆是一颗被完全填满的二叉树,例如下图是一颗完全二叉树。 如果把所有的元素放到数组中: 如果把某个根节点的下标设为i,那么它的左子节点的下标的2i+1,右子节点的下标的2i。这个规律是进行堆操作的基础

2017-11-16 21:53:58 279

原创 杨氏矩阵查找算法

今天再牛客上看到一个算法题。 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 例如下图中要查找 8。如果存在返回true,如果要查找30,则返回false。 查询的思路就是直接定位到第一行的最右边的元素(5),如果要查找的元素比5小,则左移,如果比5大则下移,反复执行,直到查

2017-11-10 11:04:48 403

原创 观察者模式

Observable是java实现观察者模式的一种方式,被观察者需要继承Observable,观察者实现Observer接口。被观察者//学生,被观察者,继承Observable(可以被观察的)public class Student extends Observable { public void study(){ System.out.println("学生:1+1=几"

2017-08-02 10:57:33 278

原创 Buffer

Buffer是java.nio包下的一个抽象方法。提供了对I/O的高速操作。 Buffer主要有两种操作模式,读模式和写模式。 内部通过几个变量,对buffer进行操作。//变量所表示的意义在不同操作中也不同// Invariants: mark <= position <= limit <= capacityprivate int mark = -1;private int positi

2017-08-01 16:41:36 508

原创 Set

一开始有看源码的时候,最先看的是set,点进源码之后才看到,set内部是用map实现的,花了几天时间看了集中map源码,看完之后也会忘,但是还是有很大收获,读源码的道路还是要继续下去。 HashSet HashSet继承了AbstractSet,实现了Set、Cloneable、Serializable接口。 HashSet内部的实现方式是HashMap public HashSet()

2017-07-19 21:01:42 286

原创 ConcurrentHashMap

ConcurrentHashMap继承了AbstractMap,实现了AbstractMap和Serializable接口。 ConcurrentHashMap是支持高并发的hashMap。 //节点信息保存了对应的hash值、key、value,及下一节点信息,但是value和下一节点信息用volatile 修饰,保证可见性。 static class Node<K,V> impl

2017-07-17 17:52:48 360

原创 IdentityHashMap

IdentityHashMap继承了AbstractMap,实现了Map, java.io.Serializable, Cloneable接口。IdentityHashMap是一个比较奇葩的hashMap,为什么这么说呢,因为它和别的HashMap有很大区别。和其它HashMap相比,IdentityHashMap并没有使用hash桶链表等结构存储内部数据,而是只使用了数组来存储数据。transie

2017-07-16 17:04:38 499

原创 LinkedHashMap

LinkedHashMap继承自HashMap,实现了Map接口。LinkedHashMap保持了内部数据为插入的顺序。因为LinkedHashMap用双向链表维持内部数据。 static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> before, after;//双向链表 Entry(int

2017-07-14 23:43:57 270

原创 WeakHashMap

WeakHashMap继承AbstractMap,实现了Map接口。WeakHashMap内部使用了数组、队列的结构。 private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V> { V value; final int hash;

2017-07-13 17:53:44 398

原创 TreeMap

TreeMap继承AbstractMap,实现了NavigableMap, Cloneable, java.io.Serializable接口//TreeMap内部使用红黑树维护数据static final class Entry<K,V> implements Map.Entry<K,V> { K key; V value; Entry<K,V>

2017-07-13 15:27:01 332

原创 HashTable

HashTable继承了Dictionary,实现了Map,Cloneable, java.io.Serializable接口。 HashTable内部比较重要的方法有get(Object key),put(K key, V value),rehash(),addEntry(int hash, K key, V value, int index),remove(Object key)HashTa

2017-07-12 14:05:31 386

原创 HashMap

HashMap继承自AbstractMap,实现了Map,Cloneable, Serializable接口

2017-07-11 18:16:10 267

原创 LinkedList

LinkedList继承了AbstractSequentialList,实现了 List, Deque, Cloneable, java.io.Serializable接口,Deque接口继承了Queue接口,所以LinkedList也是一个队列。 LinkdeList内部以Node为核心对内部的数据进行维护。 //链表实现 private static class Node<E>

2017-07-06 22:18:09 375

原创 ArrayList

List是我们常用到的集合类,JDK文档描述 All Superinterfaces: Collection, Iterable All Known Implementing Classes: AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayL

2017-07-03 22:58:41 303

转载 单点登录原理与简单实现

在网上看到一篇很好的单点登录原理与简单实现文章,记录一下 这里写链接内容 若博主不同意我的链接,请联系我删除

2017-05-03 11:10:15 404

原创 简单实现生产者消费者问题

生产者消费者问题,是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程--即所谓的“生产者”和“消费者”在实际运行时会发生的问题。。生产者主要的作用是生产一定量的数据放置到缓冲区,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。 该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区空时消耗数据。话不多说,直接上代码/** * 馒头对象

2017-05-02 16:09:17 728

原创 正则表达式匹配两个特殊字符中间的内容

今天在使用正则表达式中,要匹配两个字符中间的内容,一时没有写出来,后来在网上找到了,记录一下。 匹配两个字符串A与B中间的字符串包含A与B: 表达式: A.*?B(“.“表示任意字符,“?”表示匹配0个或多个) 示例: Abaidu.comB 结果: Awww.apizl.comB 匹配两个字符串A与B中间的字符串包含A但是不包含B: 表达式: A.*?(?=B) 示例: Awww.a

2017-04-27 17:31:12 46681 12

原创 装饰器模式

今天学习了装饰器模式,总结一下:百度百科对装饰器模式的解释:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。其要点是 1. 不改变原类文件 2. 尽量少用继承 3. 动态扩展装饰模式的特点 (1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。 (2) 装饰对象包含一个真实

2017-04-18 17:34:07 324

原创 回调函数

回调函数: 个人理解为:方法B.b()存在的目的就在于让方法A.a()去调用,以达到方法A.a()所想要的效果。public class DirList { public static void main(String[] args) { File path = new File("."); String[] list; if(args.len

2017-04-14 17:49:41 318

原创 懒汉模式和饿汉模式

今天在看《java编程思想》的访问权限控制一章中,里面讲到private关键字,一个单例模式,原来看过这种写法,但是一直不明白其中的道理,看过之后就明白了。下面是这个栗子public class Single { private static Single single = new Single(); private Single() {} public static Single

2017-03-29 11:15:26 720

原创 对象的创建过程

对象的创建过程jvm查找类的路径,定位到.class文件载入.class文件,有关静态初始化的所有动作都会被执行(静态初始化只在对象首次加载的时候进行一次)当用new创建对象的时候,在堆上为对象分配足够的空间存储空间将会被初始化,自动为对象的所有基本数据类型设置成默认值,引用被置为null执行所有出现于字段定义处的初始化动作执行构造器public class A { A(){

2017-03-28 17:34:48 484

原创 java的基本数据类型

java的基本数据类型java有八种基本数据类型

2017-03-28 10:32:18 1332

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除