朱小厮的博客

你若盛开 蝴蝶自来 你若精彩 天自安排

设计模式:模板方法模式(Template Method)

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一次性的实现一个算法的不变部分,并将可变的行为留给子类来实现。 模板方法的关键是:子类可以置换掉父类的可变部分,但是子类却不可以改变模板方...

2016-03-30 19:52:03

阅读数 2346

评论数 1

设计模式:代理模式(Proxy)

代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式中的角色: 抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。 具体主题角色(RealSubject):也称为委托角色或者被代理角色。定义了代理对象所代表的...

2016-03-29 21:38:09

阅读数 7306

评论数 9

设计模式:享元模式(Flyweight)

运用共享技术有效地支持大量细粒度的对象。又名“蝇量模式”。  在Java语言中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变。在JAVA中字符串常量都是存在常量池中的,Java会确保一个字符串常量在常量池中只有一个拷贝。譬如:String a = ...

2016-03-29 21:31:30

阅读数 2266

评论数 2

设计模式:外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式又称门面模式。 外观模式的角色 1. 门面角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来...

2016-03-29 21:25:14

阅读数 2339

评论数 1

设计模式:装饰模式(Decorator)

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式想必生成子类更为灵活。  装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰模式中的角色有: 1. 抽象构件角色(Component):给出一个抽象接口,以规范...

2016-03-29 21:22:13

阅读数 2616

评论数 1

设计模式:组合模式(Composite)

将对象组合成属性结构以表示“部分-整体”的层次结构。组合使得用户和单个对象和组合对象的使用具有一致性。 组合模式设计的角色: 1. Component:是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component. 2. Leaf:在组合...

2016-03-29 21:16:50

阅读数 2373

评论数 1

Java对象大小内幕浅析

最近突发奇想,忽然对Java对象的内存大小感兴趣,去网上搜集了一些资料,并且做一下整理,希望能够各位帮助。  如果:你能算出new String(“abc”)这个对象在JVM中占用内存大小(64位JDK7中压缩大小48B,未压缩大小64B), 那么看到这里就可以结束了~ Java对象的内存布局...

2016-03-29 18:59:00

阅读数 12214

评论数 10

设计模式:桥接模式(Bridge)

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 意图:将抽象与实现解耦。  桥接模式主要应对的是由于实际的需要,某个类具有两个或者两个以上的维度变化(违反了SRP原则),如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。桥接模式所涉及的角色 1. Abstractio...

2016-03-28 19:02:57

阅读数 6104

评论数 2

设计模式:适配器模式(Adapter)

适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。  适配器模式有类适配器模式和对象适配器模式两种不同的形式。 类适配器  类适配器模式把适配的类的API转换成目标类的API  适配器模式所涉及的角色: 目标角色(...

2016-03-28 18:56:23

阅读数 5120

评论数 0

设计模式:原型模式(Prototype)

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。  举个例子: 1 原型(实际上是implements了Cloneable接口,进而重写clone()方法)public class ProtoType implements Cloneable { priv...

2016-03-25 16:07:26

阅读数 1781

评论数 0

设计模式:建造者模式(Builder)

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  建造者模式通常包括下几个角色: 1. builder(抽象建造者):给出一个抽象结论,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体的对象部件的创建。 ...

2016-03-25 11:18:54

阅读数 5794

评论数 1

设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象...

2016-03-24 21:42:17

阅读数 4090

评论数 3

设计模式:单例模式(Singleton)

  单例模式在23个设计模式中算得上是最简单的一个了,也许你会有异议,那就换成“最简单之一”,这样就严谨了很多。   单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。   适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展...

2016-03-23 21:37:46

阅读数 6590

评论数 5

设计模式:开篇

  最近在整理设计模式这个系列,这里做一下全局的概括。本系列的文章对于初识设计模式的朋友也许不太适应,对于那些了解过或者使用过设计模式的人比较适应,本系列的文章对设计模式的关键点做了一个终结性的陈述,也列举了相关例子方便理解和记忆,但是并没有循序渐进的讲解。譬如,在适配器模式中,博主阐述了适配器的...

2016-03-23 21:32:44

阅读数 4537

评论数 5

Java集合框架:总结

最近博主对于Java集合框架这个系列做了一个整理,主要包括: Map系:HashMap, LinkedHashMap, TreeMap, WeakHashMap, EnumMap; List系:ArrayList, LinkedList, Vector, Stack; Set系:HashSet...

2016-03-18 17:03:32

阅读数 3635

评论数 9

Java集合框架:Collections工具类

java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的。整个Collections工具类源码差不多有4000行,我们针对一些典型的方法进行阐述。1. 调用一个空List,Set,Mappublic static final ...

2016-03-18 16:44:16

阅读数 7747

评论数 1

Java集合框架:Arrays工具类

java.util.Arrays类能方便地操作数组,它提供的方法都是静态的。整个Arrays工具类的实现有3000+行,但是归纳总结一下可知它有以下功能(9个):1. asList定义: @SafeVarargs public static <T&a...

2016-03-18 16:34:48

阅读数 5689

评论数 0

Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)

Set概述 Set几乎都是内部用一个Map来实现, 因为Map里的KeySet就是一个Set,而value是假值,全部使用同一个Object。Set的特征也继承了那些内部Map实现的特征。HashSet1. 定义package java.util; public class HashSet&am...

2016-03-17 21:37:57

阅读数 3401

评论数 3

Java集合框架:LinkedList

LinkedList以双向链表实现,允许重复。(如下Node的实现)并保留头指针和尾指针。链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作。按下标访问元素—get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移...

2016-03-17 20:13:57

阅读数 2616

评论数 2

Java集合框架:ArrayList

  **ArrayList以数组实现,允许重复。超出限制时会增加50%的容量(grow()方法中实现,如下所示),每次扩容都底层采用System.arrayCopy()复制到新的数组,因此最好能给出数组大小的预估值...

2016-03-17 20:08:01

阅读数 3971

评论数 8

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