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();
}
}
网友评论