Sunday, October 28, 2012

Java HelloWorld sample with decoupled

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();
 }

}


No comments:

Post a Comment