This is Java HelloWorld sample with decoupled.
Download Source code here
package org.sample.app;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
package org.sample.app;
public class HelloWorldWithCommandLine {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println(args[0]);
} else {
System.out.println("Hello World!");
}
}
}
package org.sample.message;
public interface MessageProvider {
public String getMessage();
}
package org.sample.message;
public interface MessageRenderer {
public void render();
public void setMessageProvider(MessageProvider provider);
public MessageProvider getMessageProvider();
}
package org.sample.message.impl;
import org.sample.message.MessageProvider;
public class HelloWorldMessageProvider implements MessageProvider {
public String getMessage() {
return "Hello World!";
}
}
package org.sample.message.impl;
import org.sample.message.MessageProvider;
import org.sample.message.MessageRenderer;
public class StandardOutMessageRenderer implements MessageRenderer {
private MessageProvider messageProvider = null;
public void render() {
if (messageProvider == null) {
throw new RuntimeException(
"You must set the property messageProvider of class:"
+ StandardOutMessageRenderer.class.getName());
}
System.out.println(messageProvider.getMessage());
}
public void setMessageProvider(MessageProvider provider) {
this.messageProvider = provider;
}
public MessageProvider getMessageProvider() {
return this.messageProvider;
}
}
package org.sample.app.decoupled;
import org.sample.message.MessageProvider;
import org.sample.message.MessageRenderer;
import org.sample.message.impl.HelloWorldMessageProvider;
import org.sample.message.impl.StandardOutMessageRenderer;
public class HelloWorldDecoupled {
public static void main(String[] args) {
MessageRenderer mr = new StandardOutMessageRenderer();
MessageProvider mp = new HelloWorldMessageProvider();
mr.setMessageProvider(mp);
mr.render();
}
}
package org.sample.app.decoupled;
import java.io.FileInputStream;
import java.util.Properties;
import org.sample.message.MessageProvider;
import org.sample.message.MessageRenderer;
public class MessageSupportFactory {
private static MessageSupportFactory instance = null;
private Properties props = null;
private MessageRenderer renderer = null;
private MessageProvider provider = null;
private MessageSupportFactory() {
props = new Properties();
try {
props.load(new FileInputStream("src/conf/msf.properties"));
// get the implementation classes
String rendererClass = props.getProperty("renderer.class");
String providerClass = props.getProperty("provider.class");
renderer = (MessageRenderer) Class.forName(rendererClass).newInstance();
provider = (MessageProvider) Class.forName(providerClass).newInstance();
} catch (Exception ex) {
ex.printStackTrace();
}
}
static {
instance = new MessageSupportFactory();
}
public static MessageSupportFactory getInstance() {
return instance;
}
public MessageRenderer getMessageRenderer() {
return renderer;
}
public MessageProvider getMessageProvider() {
return provider;
}
}
package org.sample.app.decoupled;
import org.sample.message.MessageProvider;
import org.sample.message.MessageRenderer;
public class HelloWorldDecoupledWithFactory {
public static void main(String[] args) {
MessageRenderer mr = MessageSupportFactory.getInstance().getMessageRenderer();
MessageProvider mp = MessageSupportFactory.getInstance().getMessageProvider();
mr.setMessageProvider(mp);
mr.render();
}
}