“终结者守护者”如何在java中工作?

2022-09-03 06:31:41

“终结者守护者”[有效的Java,第30页]如何工作?

你用过它们吗?它解决了任何具体问题吗?


答案 1

它解决了子类忘记调用超类的方法的问题。此模式的工作原理是将具有 overrided 的额外实例附加到超类。这样,如果超类超出范围,附加的实例也将超出范围,这将触发其 的执行,而后者又会调用封闭类的 。finalizefinalizefinalizefinalize

下面是一个简短的片段,展示了守护者模式的实际应用:

public class Parent {

    public static void main(final String[] args) throws Exception {
        doIt();
        System.gc();
        Thread.sleep(5000); //  5 sec sleep
    }

    @SuppressWarnings("unused")
    private final Object guardian = new Object() {
        @Override protected void finalize() {
            doFinalize();
        }
    };

    private void doFinalize() {
        System.out.println("Finalize of class Parent");
    }

    public static void doIt() {
        Child c = new Child();
        System.out.println(c);
    }

}

class Child extends Parent {

    // Note, Child class does not call super.finalize() but the resources held by the
    // parent class will still get cleaned up, thanks to the guardian pattern
    @Override protected void finalize() {
        System.out.println("Finalize of class Child");
    }

}

答案 2