PublisherBuilder.java
package eu.javaexperience.patterns.creational.builder;
import eu.javaexperience.interfaces.simple.publish.SimplePublish1;
public abstract class PublisherBuilder<P, R, I> implements SimplePublish1<P>
{
protected R result;
public void assertInitialized()
{
if(null == result)
{
throw new RuntimeException("PublisherBuilder is not yet initialized.");
}
}
public void assertNotInitialized()
{
if(null != result)
{
throw new RuntimeException("PublisherBuilder is already initialized.");
}
}
public void initialize(I init)
{
assertNotInitialized();
result = internalInitialize(init);
if(null == result)
{
throw new RuntimeException("PublisherBuilder initialization failed");
}
}
public void close(){}
protected abstract R internalInitialize(I init);
public R getResult()
{
return result;
}
public boolean isOpened()
{
return null != result;
}
}