0

以下は私のインターフェースです -

public interface IClient {
    public String read(ClientInput input);
}

これは私のインターフェースの実装です -

public class TempClient implements IClient {

    @Override
    public String read(ClientInput input) {

    }
}

以下は私の工場コードです -

public class TempClientFactory {

    public static IClient getInstance() {
    // new TempScheduler().startScheduler();
    return ClientHolder.INSTANCE;
    }

    private static class ClientHolder {
        private static final TempClient INSTANCE = new TempClient();
    }
}

今、私はTempClientこのようなインスタンスを取得するファクトリを持っているので、顧客は私たちのコードを呼び出すときに以下のように私たちのファクトリを使用します.

IClient client = TempClientFactory.getInstance();
client.read(input);

以下は私のバックグラウンドスレッドコードです-

public class TempScheduler {

    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        public void startScheduler() {
            final ScheduledFuture<?> taskHandle = scheduler.scheduleAtFixedRate(new Runnable() {
                public void run() {
                try {
                    callServers();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                }
            }, 0, 500, TimeUnit.SECONDS);
        }
    }

    //... some code
}

問題文:-

  1. これで、URL からデータをフェッチし、解析して変数に格納するバックグラウンド スレッドがバックグラウンドで実行されます。ここで私が望むのは、顧客がファクトリを使用してコードを使用するための呼び出しを開始したらすぐに、バックグラウンド スレッドを開始することです。そこで、バックグラウンド スレッド呼び出しをファクトリgetInstanceメソッドに入れることができると考えました。
4

1 に答える 1

1

はい、getInstance() に入れて、このメソッドが初めて呼び出されたときにのみ呼び出します。これがあなたの望むものだと思います。

また

フレームワークを使用していて、アプリの初期化/準備ができたときにそのフレームワークがイベントを送信している場合は、そこにフックしてそこで実行することもできます。ただし、その場合、顧客が getInstance() を呼び出す前であっても実行を開始する可能性があります。それがOKかどうかはあなた次第です。

後者の方が優れています。

于 2014-01-14T19:55:28.103 に答える