面向对象的方法(类生成思想)[高内聚]

  我们一般说,设计类要做到'高内聚,低耦合',所谓的'高内聚',现在开始明白一点:

    学会用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();
		}
	}

}

 

posted @ 2015-02-05 16:02  wonkju  阅读(285)  评论(0编辑  收藏  举报