面向对象的方法(类生成思想)[高内聚]
我们一般说,设计类要做到'高内聚,低耦合',所谓的'高内聚',现在开始明白一点:
学会用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(); } } }