离弦之Ray

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

#

 

基础概念——Class Modeling

OO的概念——这就不多说了


三种模型

class model——描述object的结构

state model——描述单个object的行为

interaction model——描述object之间的互动行为


Class Model

单个的class图很简单


首先是类名、然后是属性,最后是方法。

前面的+表示public-表示private#表示protected


Association


形式上Association就是一根线,表示两个类之间的关系,线上可以标明Association的名字,两端可以标上multiplicity1表示one"1..*"表示one or more"3..5"表示three to five

"*"表示many

两个类之间可以有多于一个Association,但一般不常用


Association End Names


Association
的两端可以标上两个类在这个关系中的角色

这在两个类的关系中作用可能不是特别明显,但如果相关的双方属于同一个类


Association两端可以加很多限制



等等,还有Bags对应于sequence,没有先后次序。


Qualified Association


首先是没有Qualified


然后是Qualified



N-ary Association


Generalization

具体在编程语言中,就是继承关系


很简单不多说


Association->Aggregation->Composition


Aggregation表现的是一种part-whole的关系


Composition


Composition
Aggregation的区别是part只能属于一个Assembly

可以说Association->Aggregation->Composition关系一层强过一层


Abstract Class 类名用斜体字


属性有一种叫做Derived Data,它的意思是这个属性是被其它属性或类导出来的,被其它elements所决定,符号是在这个属性前面加上斜杠


如上图中,agebirthdate currentDate所决定。

最后一种图示,就是package


posted @ 2007-10-15 11:30 离弦之ray的技术天空 阅读(706) | 评论 (0)编辑 收藏

 

servlet 基本结构

public class ServletClass extends HttpServlet {

public void doGet(HttpServletRequest request, HttpSevletResponse response)

throws ServletException,IOException{

//Use “request” to read incoming HTTP headers


//Use “response” to specify the HTTP response status


//use “out” to send content to browser

PrintWriter out = response.getWriter();

}

}

如果希望servletGETPOST请求采用同样的行动,只需要让doGet调用doPost,反之亦然。
值得注意的是doGetdoPost都要接收以上两种类型的参数。


servlet 处理表单数据

表单数据

1)使用FORM来创建HTML表单

<FORM ACTION="..."> 其中 "..."指的就是处理表单的servlet 或者JSP

2)使用输入元素收集用户数据

<INPUT TYPE="TEXT" NAME="...">

3)在接近表单的尾部放置提交按钮

<INPUT TYPE="SUBMIT">

读取表单数据

有三种情况:①request.getParameter②request.getParameterValues

request.getParameterNames

getParameter对应于单个值的读取,如果有这个参数但没值,那就返回空的String;如果没有这个参数,则返回null

getParameterValues对应于同一个参数的多个值,返回的是一个数组,是这个参数值的集合。如果不存在这个参数名,那就返回一个null;如果这个参数只有一个值,那就返回一个只有一个元素的数组。

getParameterValues返回的是所有参数的一个Enumeration,如果没有参数,那返回的就是一个空的Enumeration而不是null。同时这个Enumeration中的次序是乱序的。

要对参数为null或者为空String的情况作出相应的处理

if((param==null)||(param.trim().equals(""))){...}


RequestDispatcher

下面的代码:

RequestDispatcher dispatcher = request.getRequestDispathcer s(address);

dispatcher.forward (request,response);



JSP

JSP直接插入表达式

<%= Java Expression%> 比如:<%= new java.util.Date() %>

其实,JSP在后台都被转化成servlet,所以servlet JSP没有本质的区别。


scriptlet

说白了,就是直接在JSP页面中插入java代码,我不是很喜欢,太乱了。举个例子:

<% if(Math.random()<0.5) {%>

<H1>Have a <I>nice</I> day!</H1>

<% } else {%>

<H1>Have a <I>lousy</I>day!</H1>

<% } %>

JSP page指令

import 属性

<%@ import = "package.class"%>

<%@ import = "package.class1,package.class2...package.classN"%>

contentTypepageEncoding属性

<%@ page contentType = "someMimeType; charset = someCharacterSet"%>

比如<%@ page contentType = "application/vnd.ms-excel"%>

pageEncoding指的是字符集

比如设置成日语:<%@ page pageEncoding="Shift_JIS"%>


session属性

控制页面是否参加HTTP会话

<%@ page session = "true"%>


isELIgnored属性

是否忽略JSP2.0表达式语言

<%@ page isELIgnored = "ture"%>


此外还有bufferautoFlusherrorPageisErrorPageisThreadSafeextendslanguage属性


JSP中使用JavaBean

基本要掌握三个语句

<jsp: useBean id="beanName" class="package.class"/>

<jsp:getProperty name = "beanName" property="propertyName"/>

<jsp:setProperty name ="beanName" property="propertyName" value="propertyValue"/>






posted @ 2007-10-14 22:57 离弦之ray的技术天空 阅读(600) | 评论 (0)编辑 收藏

 

Java类型相关

类型名

大小

取值范围

byte

8 bits

-128127

short

16 bits

-32768~32767

int

32 bits

long

64 bits

float

32 bits

double

64 bits

Java常量

十进制不能以0打头(数字0除外)

十六进制必须以0x或者0X打头

八进制必须以0打头

长整型必须以L结尾

小数常量默认为double型,如果要将小数赋值给float变量,数字后面要加f

final关键字

final 标记的类不能被继承

final 变量是常量,不能改变

final 方法不能被子类重写

Java变量

1)当发生隐式类型转换时,目标类型取值范围要大于源类型取值范围

2)字符串可以使用加号同其它的数据类型相连而形成一个新的字符串

Example

System.out.println(‘a’+1);    输出的是98

System.out.println(“”+’a’+1); 输出的是”a1”

3局部变量一定要进行初始化

        编译的时候可能只是警告,但在使用时就会报错

Java运算

(1)       整数之间做除法时,只保留整数部分而舍弃小数部分。

(2)       养成这样的习惯:把x==3 写成 3==x

(3)       &&&的区别

&&称为短路表达式,意思就是&不管两边是true或者false都会算一下,而&&如果算到前面的是false,它后面就不算了,反正综合起来表达式肯定是false

(4)       位运算

<< 左移

>> 右移

   如果最高位是0,左边移空的高位就填0,如果最高位是1,左边移空的高位就填入1

>>> 无符号右移

   不管最高位是什么,移空的高位一律填入0

右移n位就是除以2n次方

左移n位就是乘以2n次方

Java内存

1Java内存分为两种:

栈内存:用于存放基本类型变量和对象的引用变量

堆内存new创建的对象和数组

2)当堆内存中的对象没有引用指向它时,它就变成了垃圾,会被垃圾回收器回收。

Java面向对象

1= =常用来比较引用是否指向同一个地址

     equals()用来比较对象的内容是否一样

     对于数组有Array.equals方法

2finalize()方法,它相当于C++中的析构函数,但又和析构函数不一样。因为Java里面已经有垃圾回收器了,所以finalize方法不是特别重要。另外,finalize是在对象被当成垃圾从内存中释放前调用,而不是在对象变成垃圾前调用,垃圾回收器什么时候清理垃圾是不定时的,所以不要指望用finalize做什么必要的收尾工作,因为你根本无法确定它会赶在垃圾回收器之前执行。

3System.gc()这个语句可以显式地调用垃圾回收器回收垃圾。

Java参数传递

(1)       基本类型的变量作为实参传递,并不能改变这个变量的值

举个例子,就是main函数里面定义的一个变量,传给一个方法,改下值,其实并没有改变main函数里面那个变量而是改了那个方法自己内部的那个副本。

(2)       那如果传递的是某个对象的引用呢?

道理一样,传递的是值,这个“值”就是引用的“值”,也就是对象的内存地址,方法通过这个地址对变量进行的修改,当然就是对main函数中定义的这个变量本身的修改了。

Java内部类

A类里面定义了B类,那么B就叫做内部类,A就叫做外部类。

B可以直接访问A类的所有变量和方法,反之不成立。

B类保存了A类的this引用。

内部类可以是static

如果内部类被声明为static,那么它可以包含static的变量,但不再能访问外部类的非static变量。

方法内定义的内部类,只能访问方法中的final变量,而不能访问临时变量,但可以访问外部类的变量。

Java异常

(1)       一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类

(2)       如果父类抛出多个异常,那么覆盖方法必须抛出那些异常的一个子集,也就是说,不能抛出新的异常。

Java线程

两种实现多线程方式

(1)       直接继承Thread

MyThread extends Thread

然后

MyThread t = new MyTread();

t.start();

t.start();

值得注意的是,无论调用start多少遍只能启动一个线程。

要实现多个线程,只能生成多个对象,分别启动线程,一个对象只能启动一个线程

(2)       实现Runnable接口

MyThread implements Runnalbe

然后

new Thread(t).start();

new Thread(t).start();

这种方法就能实现多个线程。

但这两种方法启动的多个线程又有不一样的地方:

第一种因为是生成了多个对象,所以类中声明的一些资源,比如变量等等都是各不相关的。

第二种对类中声明的资源是多个线程共享的。

所以要按需选择。

Java StringStringBuffer

String 对象不能轻易被改变,经常用的“+”其实是新生成了一个String对象,平常感觉不大,但是真的在大型应用中,对效率影响非常严重。

StringBuffer对象可以改动,一旦生成了不再变化的内容,就可以调用它的toString方法,把它转化为String对象。

posted @ 2007-10-10 10:51 离弦之ray的技术天空 阅读(583) | 评论 (1)编辑 收藏

 

Template method pattern

从这个模式的名字就可以知道个大概,Template说明这个模式有一个模版,子类都要按照父类列出的大纲来干活。在这个模式中,父类通常是abstract的。为什么不用接口?因为对某些所有子类都要用到的方法,父类中就给出了代码,而接口中是不能有具体实现代码的。

父类中有一个总的方法就是所谓的template method,这个方法通常被声明为final,这样子类就无法override它,保证了它的权威性。这个template method调用其它方法,这些“其它方法”包括了三个类型:

第一种,是abstract类型,子类需要根据自己的情况实现这部分代码;

第二种,是final型的,这种方法父类把它写死了,子类必须遵守;

第三种,就是普通方法,是optional,子类可以延用父类的方法,也可以override掉它,写自己的代码,这种optional的方法给它一个名字叫做hook

这个父类通常是这种形势。

abstract class AbstractClass{

  final void templateMethod(){

      a();

      b();

      c();

      …

}

    abstract void a();

    final void b(){}

    void c(){}

}

应该说这个模式既蕴含着权威性和自由性。

Iterator and Composite Patterns

       这个模式的研究对象是Collection,包括ArrayListArray甚至还有Hashmap等等一切java里面的集合对象。Iterator的理念是把集合对象中的遍历等功能独立抽取出来,实现一个Iterator的接口,主要实现next()hasNext()两个方法,这些东西和数据结构里面的东西基本一样。

而以此为基础的Composite Pattern其实就是数据结构里面树的概念,所以这里的东西还是找本数据结构书看看更好。

The State Pattern

       初看这个模式,发现里面有一个类似UML中状态图的东西,如其名字,这个模式主要描述如何处理应用中出现的“状态”。

       解决方式是这样的:

.      第一步,创建一个叫做State的接口,里面包含什么东西呢?记得UML状态图中发生状态转换时箭头上面那些改变的条件?把这些条件全部转化为方法,表示当这个条件发生时,状态该怎么变。

       第二步,每个具体的concreteState都要实现都要实现State这个接口。怎么实现?当然,state不是独立出现的,总有一个把它作为参数的类,里面有个私有变量保存当前的状态,暂且就把它称作currentState吧。接口中定义的方法,在concreteState中这样实现:每个方法根据条件定义,将currentState改成相应的状态。

       以上其实就是State Pattern的精髓。

posted @ 2007-09-22 13:51 离弦之ray的技术天空 阅读(213) | 评论 (0)编辑 收藏

 

Singleton Pattern

针对一些在应用中只会有一个对象存在的类而总结的模式。

令人意想不到的是,它是通过声明该类的构造函数为私有这种方法来实现的。

疑问就是,既然构造函数都成私有了,那怎么来创建这个类的对象呢?

解答就是通过在类中声明一个静态方法,返回这个对象。

典型的写法是

public static Singleton getInstance(){

 if(uniqueInstance==null){uniqueInstance = new Singleton();}

return uniqueInstance;

}

这个模式的精髓就这么简单,剩下的就是线程对对象的操作安全,要把这个方法加上synchronized关键字。

Command Pattern

书中是以餐馆点菜作比来讲述这个模式的。

其中的对比概念如下

Customer-------Client

Order------------Command

Waitress--------Invoker

Cook------------Receiver

Take order--------setCommand

orderUp-----------excute

怎么来解释呢?说白了,就是把调用类要达成的操作封装成一个Command对象,就像点菜那张单子一样,当然这个Command要符合一定的规则实现Command接口,里面非常重要的一个方法就是execute

setCommand方法相当于waitress把菜单递给了厨师,在接收者方面他只管运行execute,具体做什么传过来的command对象都已经设定好了。

Adapter & Façade

适配器模式其实没什么多说的,就是要把传过去的对象要实现接收者支持的格式,那个格式实际上就是一个接口。

Façade模式是一种衍生物,它的目的是让操作简单化。将一系列不同对象中的操作整合,提供给其它类调用接口书上的例子是家庭影院,要看部电影,要开这个电器,开那个电器,通过Façade模式,将要看电影所必须的动作整合起来,一键搞定。明白了这点,也就理解了这个模式。

posted @ 2007-09-18 15:48 离弦之ray的技术天空 阅读(162) | 评论 (0)编辑 收藏

仅列出标题
共11页: First 上一页 3 4 5 6 7 8 9 10 11 下一页