面向对象的方法(类生成思想)[高内聚]
我们一般说,设计类要做到'高内聚,低耦合',所谓的'高内聚',现在开始明白一点:
学会用OOP(面向对象)的思想去设计类,我们设计好的类,我们可以将有关联的方法集中到一个类中,用户使用的时候,是获得当前类的一个对象,然后去调用我们的方法,例如,在java web中,用户登录初次登录时,向Servlet中发送请求时,<Servlet进行cookie加密>;以及用户在规定时间内再次自动登录时,<filter进行cookie解密>.他们使用的加密,解密算法是一样的.或者说他们使用同一套数据,所以说他们关联.
又如,通常有两种方式去创建线程对象,并启动,但我们常常看到这样的代码:
new Thread(new Runnable() { public void run() { //待执行的代码. } }).start();
我们使用一个线程去执行一段代码,不是将代码直接放到当前线程对象去执行,而是将所要执行的代码,封装在一个对象中(这里是一个实现Runnable对象的匿名对象),然后让这个对象去执行.另外,我们设计类的时候,要做到,别人在调用我的时候,不用考虑线程是否同步问题.如下面试题:子线程执行10次循环,然后主线程执行100次循环,如此往复50次.这里的'往复50次'应该在业务逻辑层中,而'子线程10次循环','主线程100次循环',他们循环过程应该封装在自己的类中,代码:
package spt.traditional.communication;
/**
* 子线程执行10次循环,然后主线程执行100次循环,如此往复50次.
*
* @author Administrator
*
*/
public class TraditionalThreadCommunication {
/**
* @param args
*/
public static void main(String[] args) {
final Business business = new Business();
// 子线程.
new Thread(new Runnable() {
public void run() {
for (int i = 1; i <= 50; i++)
business.sub();
}
}).start();
// 主线程.
for (int i = 1; i <= 50; i++)
business.main();
}
static class Business {
// 测试是否应该子线程执行.
private boolean shouldBeSub = true;
public synchronized void sub() {
// 不应该是子线程执行,则子线程等待.
while (!shouldBeSub) {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 执行子线程.
for (int i = 1; i <= 10; i++)
System.out.println("sub:" + i);
// 通知主线程执行.
shouldBeSub = false;
notify();
}
public synchronized void main() {
// 应该是子线程执行,则主线程等待.
while (shouldBeSub) {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 执行主线程.
for (int i = 1; i <= 100; i++)
System.out.println("main:" + i);
// 通知子线程执行.
shouldBeSub = true;
notify();
}
}
}

浙公网安备 33010602011771号