您的位置:首页 > 其它

Thinking In Patterns

2014-11-03 23:18 134 查看
首先要用到静态类的概念:静态类是指在一个类的内部,又定义了一个静态的内部类。内部类是指只在该类中使用到内部类,static指的是随着类的加载就会被调用,而不是类对象的创建。点击打开链接

静态内部类的用法包括如下:

(1) 使用静态内部类设置主程序入口

public class MainInStaticClass {
static class Main{
public static void main(String[] args){
new MainInStaticClass().print();
}

public void print(){
System.out.println("main in static inner class");
}
}

public class TestMain {
public static void main(String[] args) {
new MainInStaticClass.Main.main();
}
}


//: singleton:PoolManager.java
package singleton;
import java.util.*;

public class PoolManager {
private static class PoolItem {
boolean inUse = false;
Object item;
PoolItem(Object item) { this.item = item; }
}
private ArrayList items = new ArrayList();
public void add(Object item) {
items.add(new PoolItem(item));
}
static class EmptyPoolException extends Exception {}
public Object get() throws EmptyPoolException {
for(int i = 0; i < items.size(); i++) {
PoolItem pitem = (PoolItem)items.get(i);
if(pitem.inUse == false) {
pitem.inUse = true;
return pitem.item;
}
}
// Fail early:
throw new EmptyPoolException();
// return null; // Delayed failure
}
public void release(Object item) {
for(int i = 0; i < items.size(); i++) {
PoolItem pitem = (PoolItem)items.get(i);
if(item == pitem.item){
pitem.inUse = false;
return;
}
}
throw new RuntimeException(item + " not found");
}
} ///:~

//: singleton:ConnectionPoolDemo.java
package singleton;
import junit.framework.*;

interface Connection {
Object get();
void set(Object x);
}

class ConnectionImplementation implements Connection {
public Object get() { return null; }
public void set(Object s) {}
}

class ConnectionPool { // A singleton
private static PoolManager pool = new PoolManager();
public static void addConnections(int number) {
for(int i = 0; i < number; i++)
pool.add(new ConnectionImplementation());
}
public static Connection getConnection()
throws PoolManager.EmptyPoolException {
return (Connection)pool.get();
}
public static void releaseConnection(Connection c) {
pool.release(c);
}
}

public class ConnectionPoolDemo extends TestCase {
static {
ConnectionPool.addConnections(5);
}
public void test() {
Connection c = null;
try {
c = ConnectionPool.getConnection();
} catch (PoolManager.EmptyPoolException e) {
throw new RuntimeException(e);
}
c.set(new Object());
c.get();
ConnectionPool.releaseConnection(c);
}
public void test2() {
Connection c = null;
try {
c = ConnectionPool.getConnection();
} catch (PoolManager.EmptyPoolException e) {
throw new RuntimeException(e);
}

c.set(new Object());
c.get();
ConnectionPool.releaseConnection(c);
}
public static void main(String args[]) {
junit.textui.TestRunner.run(ConnectionPoolDemo.class);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: