- 浏览: 143875 次
- 性别:
- 来自: 广州
最新评论
-
randyjiawenjie1:
终于遇到一个人讲清楚了
阻塞I/O,非阻塞I/O -
dxqrr:
学习了。。。。
java中堆和堆栈的区别 -
tanhong:
[color=yellow][/color] ...
“is a”和“has a”的区别 -
uuid198909:
代码看着是比较………………
JDK5新特性--java.util.concurrent Semaphore(8) -
heipark:
兄弟,咱这代码纠结了点....
JDK5新特性--java.util.concurrent Semaphore(8)
文章列表
复用的基本种类:
合成/聚合复用
:
优点:
* 新对象存取成分对象的唯一方法是通过成分对象的接口。
* 这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的。
* 这种复用支持包装。
* 这种复用所需的依赖较少。
* 每一个新的类可以将焦点集中在一个任务上。
* 这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象。
缺点:
* 系统中会有比较多的对象需要管理。
通过继承的复用:
合成/聚合作为复用手段可以应用到几乎任何环境中去,而继承只能在有限的环境中使用。尽管继承是一种非常重要的复用手段,但应当首先考虑合成/聚合,而不是继承。
优点:
* 新的实现 ...
- 2008-06-14 12:47
- 浏览 1349
- 评论(0)
☆ 合成/聚合复用原则经常又叫做合成复用原则。该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。
ξ 10.1 合成与聚合的区别
合成和聚合 ...
- 2008-06-14 12:45
- 浏览 1743
- 评论(0)
第五个设计模式:合成模式
合成模式
把部分和整体关系用树结构表示,是属于对象的结构模式。合成模式
要对组合的对象进行管理,所以在一定位置给予对象的相关管理方法,如:add(),remove()等.合成模式
中对象的管理有两种方案。
1.安全方式:此方式只允许树枝构件有对象的管理方法。
2.透明方式:此方式只允许树枝和树叶都有对象的管理方法,但树叶对象中的管理方法无实际意义。
一.UML
示意图
二.组成部分
抽象构件:抽象组合对象的公共行为接口
树叶构件:树叶对象,没有下级子对象
树枝构件:树枝对象,树枝对象可以包含一个或多个其他树枝或树叶对象
三.代码例子:我以一个超市购物 ...
- 2008-06-14 12:26
- 浏览 901
- 评论(0)
这个代码成功编译,但是因为基类不知道关于stack指针堆栈的情况,这个stack对象当前在一个未定义的状态。下一个对于push()调用
把新的项放入索引2的位置。(stack_pointer的当前值),所以stack有效地有三个元素-下边两个是垃圾。(Java的stack类正是有
这个问题,不要用它).
对这个令人讨厌的继承的方法问题的解决办法是为Stack覆盖所有的ArrayList方法,那能够修改数组的状态,所以覆盖正确的操作Stack指针或者抛出一个例外。(removeRange()方法对于抛出一个例外一个好的候选方法)。
这个方法有两个缺点。第一,如果你覆盖了所有的东西 ...
- 2008-06-13 15:06
- 浏览 996
- 评论(0)
作为另一个例子,比较下面两段代码:
f()
{ Collection c = new HashSet();
//...
g( c );
}
g( Collection c )
{
for( Iterator i = c.iterator(); i.hasNext() )
do_something_with( i.next() );
}
和
f2()
{ Collection c = new HashSet();
//...
g2( c.iterator() );
}
g ...
- 2008-06-13 15:04
- 浏览 1233
- 评论(0)
原文:http://blog.csdn.net//softwarezhang/archive/2005/04/25/362832.aspx
大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系)。实际上80%的代码应该完全用interfaces写,而不是通过extends。“JAVA设计模式”一书详细阐述了怎样 ...
- 2008-06-13 15:04
- 浏览 916
- 评论(0)
我们要得到一个对象,马上想到构造方法,其实,静态工厂方法也可以替我们做到。
例如,在jdk1.4里面,Boolean用了一个静态方法来得到一个boolean对象:
public static Boolean valueOf(boolean b)
question:这个方法实际上并不返回一个object?
对
的, sun的jdk 帮助里面讲: If a new Boolean instance is not required, this
method should generally be used in preference to the constrUCtor
Boolean(bool ...
- 2008-06-12 21:52
- 浏览 1017
- 评论(0)
工厂模式总述
工厂模式属于类的创建模式,工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。工厂模式有三个基本形态:
1. 简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method
Pattern)。
2. 工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式。
3. 抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或Toolkit)模式 ...
- 2008-06-12 21:32
- 浏览 5847
- 评论(0)
3.4 不可变性
为了满足同步的需要,另一种方法是使用不可变对象[EJ
Item13]。到目前为止,几乎所有我们已经描述过的原子性与可见性的危险,比如访问过期数据,未及时更新或者观察一个处于不一致状态的对象,它们都产
生于多线程下各种难以预测的行为协同工作,多个线程总试图同时访问相同的可变状态。如果对象的状态不能被修改,这些风险与复杂度就自然而然地消失了。
创建后状态不能被修改的对象叫做不可变对象。不可变对象天生是线程安全的。它们的常量(域)是在构造函数中创建的。既然它们的状态无法被修改,这些常量永远不会变。
不可变对象永远是线程安全的。
不可变对象是简单的。它们只有一种状态, ...
- 2008-05-28 09:29
- 浏览 1026
- 评论(0)
使用多个 Java 线程之间共享数据的缺点在于数据访问必须同步,从而避免出现不一致的内容视图,后者可能会导致应用程序失败。例如,Hashtable
类的 put()
和 get()
方法是同步的。因为需要实现同步,所以 put()
和 get()
方法在执 ...
- 2008-05-28 00:12
- 浏览 1329
- 评论(0)
1、调用顺序:
JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码--->初 ...
- 2008-05-27 22:16
- 浏览 1103
- 评论(1)
大家都知道java构造 的使用方法吧,
可能大家都用它来进行对象的初始化。
就像下面这样一个例子。
public
class
Test
...
{
public
static
void
main(String [] args)
...
- 2008-05-27 21:49
- 浏览 1451
- 评论(0)
不变对象具备许多能更方便地使用他们的特性,包括不严格的同步需求和不必考虑数据讹误就能自由地共享和高速缓存对象引用。尽管不变性可能未必对于任何类都
有意义,但大多数程式中至少有一些类将受益于不可变。在本月的 Java 理论和实践中,Brian Goetz
说明了不变性的一些长处和构造不变类的一些准则。请在附带的论坛中和作者和其他读者分享您关于本文的心得。(也能够单击文章顶部或底部的“讨论”来访问论
坛。)
不变对象是指在实例化后其外部可见状态无法更改的对象。Java 类库中的 String、Integer 和 BigDecimal 类就是不变对象的示例 — 他们表示在对象的生命期内无法更改的单个 ...
- 2008-05-27 21:28
- 浏览 893
- 评论(0)
同步的基本规则:只要读取可能由其他线程写入的变量,或者写入随后由其他线程读取的变量,就必须进行同步。很容易“忘记”这个规则,特别是在读取时。
- 2008-05-27 21:14
- 浏览 1031
- 评论(0)
多线程
是一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间相互独立。多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码
是乱序执行 ...
- 2008-05-27 21:11
- 浏览 3063
- 评论(1)