使用解耦合的方式打印HelloWorld

1.传统打印HelloWorld

void main(String args[]) {
    System.out.println("Hello World!");
}

优点:逻辑清晰,易读。

缺点:不可扩展:

  a.新需求想要打印HelloWorld但是要放到html标签中,需要改代码。

  b.新需求想要使用System.err.println()方式打印,需要改代码。

 

2.改进方式,使用面向对象设计解耦合

  因为打印方式和打印内容可能会有改动,所以抽出来两个接口,一个负责提供打印内容,一个负责执行打印方式。

执行打印方式接口:

public interface MessageRender {

    /**
     * 打印消息
     */
    void render(String msg);

}

 

提供打印内容接口:

public interface MessageProvider {

    /**
     * 提供消息
     *
     * @return
     */
    String getMessage();

}

执行打印方式接口实现类:

public class HelloWorldMessageRender implements MessageRender {

    public void render(String msg) {
        System.out.println(msg);
    }
}

 

执行打印内容接口实现类:

public class HelloWorldMessageProvider implements MessageProvider {

    public String getMessage() {
        return "Hellow World!";
    }

}

程序入口类:

 

public class HelloWorldDecoupled {

    public static void main(String[] args) {

        // 消息提供方
        MessageProvider messageProvider = new HelloWorldMessageProvider();

        // 消息打印方
        MessageRender messageRender = new HelloWorldMessageRender();

        // 打印
        messageRender.render(messageProvider.getMessage());
}

 

如现在新需求需要用err的方式打印出html串

实现MessageProvider

public class HelloWorldHtmlMessageProvider implements MessageProvider {
    public String getMessage() {
        return "<html> <a href='http://www.baidu.com'>I am html</a></html>";
    }
}

实现MessageRender

public class HelloWorldErrorMessageRender implements MessageRender {

    public void render(String msg) {
        System.err.println(msg);
    }
}
public class HelloWorldDecoupled {

    public static void main(String[] args) {

        // 消息提供方
        MessageProvider messageProvider = new HelloWorldHtmlMessageProvider();

        // 消息打印方
        MessageRender messageRender = new HelloWorldErrorMessageRender();

        // 打印
        messageRender.render(messageProvider.getMessage());
    }
}

至此,添加新的打印方式和打印内容只需要修改程序入口类即可。

为了完全解耦合,在新需求来的时候不需要改动之前的代码,只需新增代码,我再新建一个工厂,使用配置文件去解耦。

工厂类:

public class MessageSupportFactory {

    private static MessageSupportFactory instance;

    private Properties props;

    private MessageRender messageRender;

    private MessageProvider messageProvider;

    static {
        instance = new MessageSupportFactory();
    }

    private MessageSupportFactory() {

        props = new Properties();

        try {

            props.load(this.getClass().getResourceAsStream("/hello.properties"));

            messageRender = (MessageRender) Class.forName(props.getProperty("render.class")).newInstance();

            messageProvider = (MessageProvider) Class.forName(props.getProperty("provider.class")).newInstance();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public MessageRender getMessageRender() {

        return messageRender;
    }

    public MessageProvider getMessageProvider() {

        return messageProvider;
    }

    public static MessageSupportFactory getInstance() {

        return instance;
    }

}

配置文件:

provider.class=fashion.helloworld.HelloWorldMessageProvider
render.class=fashion.helloworld.HelloWorldMessageRender

此时的启动类:

public class HelloWorldDecoupled {

    public static void main(String[] args) {

        MessageSupportFactory factory = MessageSupportFactory.getInstance();

        // 消息提供方
        MessageProvider messageProvider = factory.getMessageProvider();

        // 消息打印方
        MessageRender messageRender = factory.getMessageRender();

        // 打印
        messageRender.render(messageProvider.getMessage());
    }

}

源码下载:https://github.com/yangpengjuJAVA666/study.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值