我有一个抽象超类和它的很多子类。每个子类有多个实例。
每个子类都需要使用一些从 tar.gz 存档中解压缩的文件。每个子类都有自己独立的 tar.gz。即使我有一个子类的多个实例,我只需要为子类的所有实例解压一次 tar.gz。我在每个子类中使用一个静态布尔变量来协调它。
每个子类都使用相同的(重复的)代码来确定文件是否已在尝试解包之前被解包。我要问的是:有没有办法将代码移动到超类,而不是使用静态变量和每个子类的重复代码来确定子类 tar.gz 是否已解包?
这是一些代码,希望能更好地解释一下。
public abstract class SuperClassA
{
public void unpack() throws IOException
{
// default implementation to unpack the files
// without checking if they've been unpacked
}
}
public class SubClassA extends SuperClassA
{
private static Boolean m_firmwareUnpacked = false;
// Ensures the files are unpacked only once for this subclass
@Override
protected void unpack() throws IOException
{
synchronized( m_firmwareUnpacked )
{
if( m_firmwareUnpacked == false )
{
super.unpack();
m_firmwareUnpacked = true;
}
}
}
}
public class SubClassB extends SuperClassA
{
private static Boolean m_firmwareUnpacked = false;
// Ensures the files are unpacked only once for this subclass
@Override
protected void unpack() throws IOException
{
synchronized( m_firmwareUnpacked )
{
if( m_firmwareUnpacked == false )
{
super.unpack();
m_firmwareUnpacked = true;
}
}
}
}
请注意,每个子类都使用不同的文件路径来解包。
正如您所看到的,每个子类共享相同的代码,以确保只为该子类的所有实例解压缩一次存档。我想知道是否有将此代码移动到超类的好方法(但保持相同的功能,即解压缩 SubClassA 的存档不会阻止 SubClassB 解压缩其存档)?