- 浏览: 80189 次
- 性别:
- 来自: 北京
最新评论
-
hanlingbo2008:
问题:
空中巴士(airbus)、波音(Boeing)、麦道 ...
桥梁(Bridge)模式 -
hanlingbo2008:
从Enueration到Iterator的适配
publ ...
适配器模式(Adapter) -
hanlingbo2008:
从Iterator到Enueration的适配
publ ...
适配器模式(Adapter)
文章列表
转自:http://www.blogjava.net/cherishchen/archive/2007/07/10/129313.html
所有类的根接口:InputStream/OutputStream
一、底层的还是装饰的
1、底层的直接与文件系统或者硬件打交道的类(充当数据源的类):
包括InputStream和OutPutStream两大类,分别用于输入和输出,数据源可以是bytes array,String对象,file文件,stream序列等:
FileInputStream/FileOutputStream
ByteArrayInputStream/ByteArr ...
- 2008-11-27 10:23
- 浏览 1185
- 评论(0)
1. java.io 包中定义了多个流类型来实现输入和输出功能;
从不同的角度对其进行分类:
按数据流的方向可以分为输入流和输出流
按处理数据单位的不同可以分为字节流和字符流
按功能的不同可以分为节点流和处理流
节点流:直接从一个数据源读写数据;
处理流:连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更强大的读写功能;
2. java所提供的流类型位于包java.io 内都分别继承自以下四种抽象流类型
InputStream, OutputStream(字节流), Reader,Writer(字符流). 这四个类全是抽象的。
- 2008-11-27 10:22
- 浏览 1286
- 评论(0)
装饰模式(Decorator)使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰的类。装饰模式的关键在于这种扩展是透明的。
装饰模式(Decorator)的角色:
抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。
具体构件(Concrete Component)角色:定义一个附加责任类。
装饰(Decorator)角色:持有一个构件对象的实例。并定义一个与抽象构件一样的的接口
具体装饰(Concrete Decorator)角色:负责给构件对象贴上附加责任。
在什么情况使用装饰模式?
需要扩展一个类的功能,或给一个类增加附加责任。
需要动 ...
- 2008-11-25 11:57
- 浏览 723
- 评论(0)
安全合成模式代码:
public interface Component {
Composite getComposite();
void sampleOperation();
}
public class Leaf implements Component {
public Composite getComposite(){
// Write your code here
return null;
}
public void sampleOperation(){
// Write your code ...
- 2008-11-25 11:33
- 浏览 834
- 评论(0)
合成模式(composite)把部分和整体的关系用树结构表示出来。合成模式使的客户端把一个个单独的成分对象和由他们复合而成的合成对象等同看待。
合成模式(composite)的角色:
抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象规定一个接口,这个角色给出共有的接口及其默认行为
树叶构件(Leaf)角色:代表参加组合的树叶对象,树叶没有下级子对象
树枝(Composite)角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
合成模式分安全合成模式和透明合成模式。
透明合成模式: 在Component对象里面声明所有的用来管理子类对象的方法,包括a ...
- 2008-11-25 11:27
- 浏览 1088
- 评论(0)
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 1、整数:包括int,short,byte,long 2、浮点型:float,double 3、字符:char 4、布尔:boolean
基本型别
大小
最小值
最大值
boolean
-----
-----
------
char
16-bit
Unicode 0
Unicode 2^16-1
byte
8-bit
-128
+127
short
16-bit
-2^15
+2^15-1
int
32-bit
-2^31
+2^31-1
long
64-bit ...
- 2008-11-24 11:55
- 浏览 5782
- 评论(0)
1. 复合赋值操作符要求两个操作数都是原生类型的。例如,Integer等
2. 复合表达式有一个例外,如果左面是String类型,那么右边操作数是任意类型。
3. 简单赋值操作符允许左侧是对象引用类型,这就更宽松了,只要表达式左侧和右侧的变量是赋值兼容的即可。
代码:
public class BaLiang {
/**
* 八两
*/
public static void main(String[] args) {
Object x = "buy";
String i = "Effective java";
x = x + i ...
- 2008-11-24 11:20
- 浏览 709
- 评论(0)
简单赋值操作符 =
复合赋值操作符 += , -=, *= ,/= , %= ,<<=,>>=,>>>=, &=,等
1. 复合赋值表达式自动将所执行计算的结果转型为其左侧变量类型。复合表达式会悄悄产生一个转型。
2. 不要将复合赋值操作符作用与byte,short,char类型变量。同样int型数的右边要确保不是long、float、double类型
代码:
public class Banjin {
/**
* 半斤
*/
public static void main(String[] args) {
short ...
- 2008-11-24 11:12
- 浏览 1027
- 评论(0)
表达式之谜---多重转型
- 博客分类:
- java Puzzlers 笔记
1. 如果最初的数值类型是有符号的,那么执行符号扩展;如果它是char,那么不管被转换为什么类型都执行零扩展。
2. 如果你通过观察不能确定程序将要做什么,那么它做的就很有可能不是你想要的。
代码:
public class Multicast {
/**
* 多重转型
*/
public static void main(String[] args) {
System.out.println((int)(char)(byte)-1);
}
}
结果:65535
转型问题还不是很清楚!
- 2008-11-24 10:58
- 浏览 678
- 评论(0)
表达式之谜---初级问题
- 博客分类:
- java Puzzlers 笔记
1. 要避免使用l(小写字母l)作为变量名,因为,l 和1容易混淆。
2. 在long型字面常量中,一定要大写L,千万不要用小写。
代码:
public class Elementary {
/**
* 初级问题
*/
public static void main(String[] args) {
System.out.println(12345+5432l);
}
}
结果: 17777,
- 2008-11-24 10:05
- 浏览 654
- 评论(0)
表达式之谜---长整除
- 博客分类:
- java Puzzlers 笔记
1. 当你的操作数是很大的数字时,千万要提防溢出,这是个缄默的杀手。
2. 可以用更大范围的long类型。
代码
public class LongDivision {
/**
* 长整除
*/
public static void main(String[] args) {
final long MICRO_PER_DAY = 24*60*60*1000*1000;
final long MILLS_PER_DAY = 24*60*60*1000;
System.out.println(MICRO_PER_DAY/MILLS_PER_DAY);
}
}
输出 ...
- 2008-11-24 10:00
- 浏览 718
- 评论(0)
表达式之谜---找零时刻
- 博客分类:
- java Puzzlers 笔记
1. 二进制浮点对于货币计算非常不合适。
2. 在需要精确答案的地方,要避免使用float和double;对于货币计算,要使用int,lang,BigDecimal。
代码:
public class Change {
/**
* 找零时刻
*/
public static void main(String[] args) {
System.out.println(2.00-1.10);
}
}
输出:0.8999999999999999
问题在于:1.10这个数字不能被精确表示为一个double,只能被表示为最 接近他的double值。浮点运算在一个范围很广的值 ...
- 2008-11-24 09:43
- 浏览 636
- 评论(0)
表达式之谜---奇数性
- 博客分类:
- java Puzzlers 笔记
1. 当取余操作返回一个非零结果时它与左操作数具有相同的正负号。
2. 要测试你的方法在为每个数值型参数传递负数,零和正数时,其行为是否正确。
代码:
public class Odd {
/**
* 奇数性
*/
public static void main(String[] args) {
System.out.println(Odd.isOdd(-11));
}
private static boolean isOdd(int i){
return i%2==1;
}
}
当 i 为负数时, 判断失效。
- 2008-11-24 09:29
- 浏览 767
- 评论(0)
1. 混合类型计算会引起混乱,在条件表达式中更为明显
2. 最好在条件表达式中使用相同类型的第二和第三操作数
确定条件表达式结果类型的规则:
如果第二和第三操作数具有相同的类型,那么它就是条件表达式类型。
如果第一个操作数类型是T,T表示byte,short,char,而另一个操作数是一个int常量表达式,那么条件表达式的类型就是T
否则,将对操作数类型进行二进制提升,条件表达式就是第二个和第三个操作数被提升之后的类型
代码如下:
public class DosEquis {
/**
* Dos Equis
*
*/
public static void mai ...
- 2008-11-24 09:20
- 浏览 636
- 评论(0)
命令模式(Command)例子2增加宏命令
为julia的录音机增加一个记忆功能,可以把命令记录下来,在任何需要时重新把这些记录下来的命令一次性执行,这就所谓的宏命令。这时,julia的录音机就多了一个新按钮用于执行宏命令。
增加宏命令后的代码如下:
/** 在Julia中加入的宏命令代码*/
public static void test2()
{
Command play = new PlayCommand(myAudio);
Command stop = new StopCommand(myAudio);
Command r ...
- 2008-11-23 12:00
- 浏览 1212
- 评论(0)