我有一个后台服务,它每15秒运行一次线程,并做一些工作。
public class CacheCleaner implements Runnable, BackgroundService {
....
@Override
public void run() {
....
}
}BackgroundService是我用方法定义的另一个接口,我希望系统中的每个后台服务都能实现这些方法。
public interface BackgroundService
{
String getName();
void start(long initialDelay);
.....
}问题是,我想在每个这样的类的run方法中做一些工作(3-4行基本代码)(其中有10-15行)。是否有一种设计模式或更好的方法来实现这一点,而不是复制粘贴15个运行方法中的每一行中的4行?
注意:我提到了run()方法,因为我只希望在线程处于活动状态时执行这4行代码。
发布于 2016-07-22 05:34:02
你可以使用继承..。例如,
public abstract class AbstractBaseRunnable implements Runnable {
...
@Override
public void run() {
... // base work here!
}
}
public class CacheCleaner extends AbstractBaseRunnable implements BackgroundService {
...
@Override
public void run() {
super.run();
... // particular work for CacheCleaner here!!
}
}发布于 2016-07-22 05:40:00
我想你可以做点类似的事。
public abstract class Task implements Runnable {
@Override
void run() {
//do ur common stuff here (3-4 lines of code that u mentioned)
execute();
}
public abstract void execute();
}您可以实现您喜欢/需要的可运行/可调用的。在上面的代码中,"Task“类实现Runnable,还实现了"run()”方法。在这里,在"run()“方法中,您可以做您想做的任何常见事情,并声明一个抽象方法"execute()”,该方法可以根据需要由实现类实现。您的"CacheCleaner“将如下所示:
public class CacheCleaner extends Task implements BackgroundService {
....
@Override
public void execute() {
....
}
}发布于 2016-07-22 05:35:06
您可以创建一个包含3-4行基本代码的抽象类,并对每个10-15个后台服务进行子类化。
public abstract class AbstractBackgroundService implements Runnable,BackgroundService{
@Override
public final void run() {
prepareRun();
runImpl();
}
private void prepareRun() {
// your 3-4 lines basic code
}
protected abstract void runImpl();
}https://stackoverflow.com/questions/38518803
复制相似问题