[Sping]HelloWorldアプリケーションの作成(1)


既存のHelloWorld
public class HelloWorld{
	public static void main(String[] args) {
    	System.out.println("Hello World!");
    }
}
HelloWorldアプリケーションの拡張性が低い.別のメッセージを印刷したい場合は、どのように変更しますか?外部から入出力されます.
public class HelloWorldWithCommandLine {
	public static void main(String[] args) {
    	if (args.length > 0) {
        	System.out.println(args[0]);
        } else {
        	System.out.println("Hello World!");
        }
    }
}
コマンドラインでメッセージを受信すると、他のメッセージを出力できます.しかし,今回はメッセージ出力コンポーネントとメッセージ入力を受信するコンポーネントを別々にプログラミングし,メンテナンスを容易にした.
メッセージ取得コンポーネント
public interface MessageProvider {
	String getMessage();
}

public class HelloWorldMessageProvider implements MessageProvider {
	@Override
    public String getMessage() {
    	return "Hello World!";
    }
}
メッセージ出力コンポーネント
public interface MessageRenderer {
	void render();
    void setMessageProvider(MessageProvider messageProvder);
    MessageProvider getMassageProvider();
}

public class StandardOutMessageRenderer implements MessageRenderer {
	private MessageProvider messageProvider;
    
    @Override
    public void render() {
    	if (messageProvider == null) {
        	throw RuntimeException(
            	"You must set the property messageProvider of class:" 
                + StandardOutMessageRenderer.class.getName());
        }
        System.out.println(messageProvider.getMessage());
    }
    
    @Override
    public void setMessageProvider(MessageProvider messageProvider) {
    	this.messageProvider = messageProvider;
	}
    
    @Override
    public MessageProvider getMassageProvider() {
    	return this.messageProvider;
    }
}
前述したように、MessageProviderはメッセージの取得を担当し、MessageReaderはメッセージの出力を担当します.main()メソッドを作成できます.
public class HelloWorldDecoupled {
	public static void main(String[] args) {
    	MessageRenderer mr = new StandardOutMessageRenderer();
        MessageProvider mp = new HelloWorldMessageProvider();
        mr.setMessageProvider(mp);
        mr.render();
    }
}
これにより、世界中のアプリケーションのメンテナンスと柔軟性が容易になります.