[Guice] 2 面向对象化

1 bootstrap的概念
这里的bootstrap不是前端框架BootStrap,
那什么是bootstrap呢?
<1> 解析命令行参数
<2> 配置环境变量
<3> "隐藏"主函数

public class HelloWorld{
    public static void main(String[] args){
        System.out.println("Hello World!")
    }
}

上面的这段代码再熟悉不过了,我们来进行小小的改变。
1)Main函数应该要起到"老大"的作用,不能只是简单的输出一句话(业务复杂的话,可能有几百行代码),将main函数里的代码抽成一个方法函数。

public class HelloWorld {
    public static void main(String[] args) {
        printHelloWorld();
    }

    private static void printHelloWorld() {
        System.out.println("Hello World");
    }
}

2) 为了保持主类的"干净",可进一步将刚才抽出来的函数放到别的类里面

public class HelloWorldPrinter {
    public void printHelloWorld() {
        System.out.println("Hello World");
    }
}
public class App {
    public static void main(String[] args) {
        new HelloWorldPrinter().printHelloWorld();
    }
}

3)到了这一步,主函数还是没有被"隐藏",
HelloWorldPrinter和printHelloWorld仍然"暴露意图"

new HelloWorldPrinter().printHelloWorld();
于是对点两边进行处理:
a.将new HelloWorldPrinter()放到一个类里面,可用静态方法直接获取到

public class Configuration {
    public static HelloWorldPrinter getMainApplet(){
        return new HelloWorldPrinter();
    }
}

b.对于printHelloWorld,首先想到的是改名字,改成run,就不会显露"意图"了,但是那样的话HelloWorldPrinter 里面的方法也得改成run了;

public class HelloWorldPrinter {
    private void printHelloWorld() {
        System.out.println("Hello World");
    }

    public void run() {
        printHelloWorld();
    }
}

4)main函数变成了:

public class App {
    public static void main(String[] args) {
        Configuration.getMainApplet().run();
    }
}

还是有隐藏的依赖:HelloWorldPrinter mainApplet=Configuration.getMainApplet()

5)定义一个接口,MyApplet

public interface MyApplet extends Runnable {
    void run();
}

让HelloWorldPrinter实现 MyApplet 接口:

public class HelloWorldPrinter implements MyApplet {
    private void printHelloWorld() {
        System.out.println("Hello World");
    }

    public void run() {
        printHelloWorld();
    }
}

public class Configuration {
    public static MyApplet getMainApplet(){
        return new HelloWorldPrinter();
    }
}

最终主函数变成:

public class App {
    public static void main(String[] args) {
        MyApplet mainApplet= Configuration.getMainApplet();
        mainApplet.run();
    }
}

你可能感兴趣的:([Guice] 2 面向对象化)