由 admin 撰写
|
发表于: 十一月 17, 2011 at 6:46 上午
发表在: Java
|
|
单例模式(Singleton Pattern)
前面说提到的五种创建模式,主要解决的问题是如何创建对象,获得产品。而单例模式最要关心的则是对象创建的次数以及何时被创建。
Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图)。但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂,比头五种模式加起来还复杂,譬如涉及到DCL双锁检测(double checked locking)的讨论、涉及到多个类加载器(ClassLoader)协同时、涉及到跨JVM(集群、远程EJB等)时、涉及到单例对象被销毁后重建等。对于复杂的情况,本章中会涉及到其中一些
目的:
希望对象只创建一个实例,并且提供一个全局的访问点。
场景:
Kerrigan对于Zerg来说是个至关重要的灵魂人物,无数的Drone、Zergling、Hydralisk……可以被创造、被牺牲,但是Kerrigan得存在关系到Zerg在这局游戏中的生存,而且Kerrigan是不允许被多次创造的,必须有且只有一个虫族刀锋女王的实例存在,这不是游戏规则,但这是个政治问题。
分析:
如前面一样,我们还是尝试使用代码来描述访问Kerrigan的过程,看看下面的UML图,简单得我都不怎么好意思放上来占版面。

图6.1 单例模式的UML图
Continue Reading
由 admin 撰写
|
发表于: 十一月 17, 2011 at 3:09 上午
发表在: Java,Note
|
|
1.接口中所声明的方法都是抽象方法。接口中的方法都是public的。
2.接口中也可以定义成员变量。接口中的成员变量都是public,final,static的。
3.一个类不能即是final,,又是abstract的。因为abstract的主要目的是定义一种约定,让子类去实现这种约定,而final表示该类不能被继承,这样abstract希望该类可以被继承而final明确说明该类不能被继承,两者矛盾。因此一个类不能即是final的,又是abstract的。
4. Desing Pattern(设计模式)。单例模式(Singleton):表示一个类只会生成唯一的一个对象。
5.包(package)。用于将完成不同功能的类分门别类,放在不同的目录(包)下。包的命名规则:将公司域名反转作为包名,对于包名:每个字母都需要小写。如果定义类的时候没有使用package,那么java就认为我们所定义的类位于默认包里面(default package)。
6.编译带有package声明的java源文件有两种方式:
一.直接编译,然后根据类中所定义的包名,逐一手工建立目录结构,最后将生成的class文件放到该目录结构中。
二.使用编译参数 -d,方式为:javac -d .源文件.java,这样在编译后,编译器会自动帮助我们建立好包所对应的目录结构。
三.执行通过java 目录.class文件。
7.有两个包名,分别是aa.bb.cc与aa.bb.cc.dd,那么我们称后者为前者的子包。
8.导入(import),将使用package分离的各个类导入回来,让编译器能够找到所需要的类。
9.import的语法:import com.csssea.PackageTest;
10.import con.csssea.* ,表示导入com.csssea包下面的所有类。
11.import aa.bb.* 并不会导入aa.bb.cc包下面的类。这时需要这样写:
import aa.bb.*;
import aa.bb.cc.*;
12.关于package,import,class的顺序问题:
一.首先需要定义包(package),可选。
二.接下来使用import进行导入,可选。
三.然后才是class或interface的定义。
13.如果两个类在同一个包下面,那么则不需要导入,直接使用即可。
14.访问修饰符(access modifier)。
1) public(公共的):被public所修饰的属性和方法可以被所有类访问。
2)protected(受保护的):被protected所修饰的属性和方法可以在类内部,相同包以及该类的子类访问。
3) private(私有的):被private所修饰的属性和方法只能在该类内部使用。
4)默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。
Continue Reading
由 admin 撰写
|
发表于: 八月 12, 2011 at 8:32 上午
发表在: 生活琐事
|
|

清晨,坐着学校老爷车,去奥体中心干活。
有时候这老爷车,闯红灯,换5,6档,油门踩到极限。严重违反交通制度。
开始大家对这些行为都不理解,还以为老师傅拿生命开玩笑。(PS:这位老师傅是我们学校教练)
后来通过同学在车上的一番询问老师傅,得知,这辆校车,开了14年了,明年没审车的资格了。
“14年了 “ 当听到老师傅在车上说这句话,从师傅眼里能看出,师傅很舍不得这辆老爷车报销。
今晨,还是坐这这辆老爷车,车上正放着80年代的歌曲……车上的同学亦如的安静,欣赏着。
每当坐着这辆车去奥体中心干活时。都使我感觉一股浓浓的情意味。
情啊…..情啊…….情啊…….情啊……
我想对待自己的爱好,职业规划,感情甚至许许多多生活中的事儿,我也因该像师傅一样,热衷….并努力去实现着,追着,奋斗着。
由 admin 撰写
|
发表于: 八月 8, 2011 at 1:53 下午
发表在: 未分类
|
|

如果您对前端技术有兴趣,如果您支持W3C与WebRebuild,如果您喜欢前端技术并热爱重构,快来报名参加吧!
本小站支持一下!
由 admin 撰写
|
发表于: 八月 8, 2011 at 10:38 上午
发表在: Java
|
|
第十季 面向对象之多态(polymorphism)
- 多态:我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思就是:父类型的引用可以指向子类的对象。
- Parent p = new Child();当使用多态调用方法时,首先检查父类中是否有sing()方法,如果没有则编译出错,如果有,再去调用哪个子类的sing()方法。
- 一共有两种类型的强制类型转换:
a) 向上类型转换(upcast):比如说:将Cat类型转换成Animal类型,将子类型转换为父类型。对于向上类型转换,不需要显式
b) 向下类型转换(downcast):比如说将Animal类型转换成Cat类型,即将类型转换为子类型,对于向下类型转换,必须要显示指定(必须要使用强制类型转换)。
- instanceof运算符
instanceof运算符的作用:在强制类型转换之前,首先判断前一个对象是否是后一个类的实例,是否可以成功地转换,从而保证代码更加健壮。
例如:
Object hello = “疯狂的鱼”;
If(object instanceof String)
{
System.out.println(“类型符合”);
}
- 抽象类(abstract class):
使用abstract关键字所修饰的类叫做抽象类。抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例)。
- 抽象方法(abstract method):
使用abstract关键字说修饰的方法叫做抽象方法。抽象方法需要定义在抽象类中定义。相对于抽象方法,之前说定义的方法叫做具体方法(有声明,有实现)。
- 如果一个类包含了抽象方法,那么这个类一定是抽象类。
- 如果某个类是抽象类,那么该类可以包含具体的方法(有声明,有实现)。
- 如果一个类中包含了抽象方法,那么这个类一定要声明成abstract class ,也就是说,该类一定是一个抽象类;反之,如果某个类是抽象类,那么该类既可以包含抽象方法,也可以包含具体方法。
10.无论何种情况,只要一个类是抽象类,那么这个类就无法实例化。
11.在子类继承父类(父类是个抽象类)的情况下,那么该子类必须要实现父类中所定义的所有抽象方法;否则,该子类需要声明一个abstract class。
由 admin 撰写
|
发表于: 八月 6, 2011 at 7:31 上午
发表在: Java
|
|
第九季 面向对象之继承(inheritence)
- 继承:表示父子关系,Java是单继承的,它表示一个类只能从另一个类继承(被继承的类叫做父类(基类base class)继承的类叫做子类),Java中的继承使用extends关键字。
- 当生成子类对象时,Java默认首先调用父类的不带参数的构造方法。然后执行该构造方法,然后生成父类对象,接下来,再去调用子类的构造方法,生成子类的对象。(要想生成子类的对象,首先需要生成父类的对象,没有父类对象就没有子类对象,比如说:没有父亲,就没有孩子)。
- super关键字:super表示对父类对象的引用。this 表示对当前自己对象的引用。
- 如果子类使用super()显示调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法,而不会再去寻找父类的布袋参数的构造方法。与this 一样,super也必须要作为构造方法的第一条执行语句,前面不能有其他可执行语句。
- 关于继承的3点:
a) 父类有的,子类也有。
b) 父类没有的,子类可以增加。
c) 父类有的,子类可以改变。
- 关于继承的注意事项
a) 构造方法不能被继承
b) 方法和属性可以被继承
c) 子类的构造方法隐式地调用父类的不带参数的构造方法。
d) 当父类没有不带参数构造方法时,子类需要使用super来显式地调用父类的构造方法,super指的是对父类的引用,super关键字必须是构造方法中的第一行语句。
7.方法重写(override):又叫做覆写,子类与父类的方法返回类型一样,方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系。
8.方法重写与方法重载之间的关系:重载发生在同一个类内部的两个或多个方法。重写发生在父类与子类之间。
9.当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run() 方法,其中super.run()不比放在第一行语句,因此此时对象已经构造完毕,先调用父类的run() 方法还是先调用子类的run()方法是根据程序的逻辑决定的。
10. 在定义一个类的时候,如果没有显示指定该类的父类,那么该类就会继承于Java.lang.Object类(JDK提供的一个类,object类是Java中所有类的直接和间接父类)。
由 admin 撰写
|
发表于: 八月 5, 2011 at 3:09 上午
发表在: Java
|
|
第八季 面向对象之封装 二
- 类中的属性又叫做成员变量(member ariable),属性用英文表示为property或者attribute。
- 对象(object)又叫做实例(instance),生成一个对象的过程又叫做类的实例化。
- 命令约定
a) 类:首字母大写,如果一个类名由多个单词构成,那么每个单词的首字母都大写,而且中间不使用任何的连接符,比如:Person类,MemberTest类。
b) 方法:首字母小写。如果一个方法由多个单词构成,那么第一个单词的所有字母全都小写,从第二个单词开始,每个单词的手写字母大写。比如:add,addThreeInt。
c) 属性:命令约定与方法相同。比如说:age,ageOfPerson。
4.属性需要定义在类中,又叫做成员变量;而定义在方法中的变量叫做局部变量。
5. 如何定义属性?
public class Person
{
修饰符 类型 属性名称;
}
如何使用属性? 与方法一样,使用.运算符。首先需要生成类的实例,然后使用实例+“.”的方式来使用属性。
比如:
Person person = new person();
person.age;
6. 局部变量(定义在方法中的变量)使用前必须要声明并赋初值。成员变量使用前必须要声明,但可以不赋初值。
7. 成员变量与局部变量的联系与区别:
a) 无论是成员变量还是局部变量,使用前都需要声明(定义)。
b) 对于局部变量来说,使用前必须要初始化,对于成员变量来说,使用前可以不初始化。如果没有初始化成员变量就开始使用,那么每个类型的成员变量都有一个默认的初始值。
1) byte , short ,int long 类型的初始值为 0 ;
2) float,double 类型的初始值为0.0
3) char类型的初始值 ‘\u0000’
4) Boolean 类型的初始值为 false
8.引用类型(reference type):引用类型是用在对象上的。一个对象可以被多个引用所指向,但同一时刻,每个引用只能指向唯一的一个对象,如果一个对象被多个应用所指向。那么无论哪个引用对象的属性进行了修改,都会反映到其他的引用当中。
Continue Reading
New Comments