美文网首页
[Guice] 2 面向对象化

[Guice] 2 面向对象化

作者: LZhan | 来源:发表于2019-08-08 23:17 被阅读0次

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 面向对象化

    1 bootstrap的概念这里的bootstrap不是前端框架BootStrap,那什么是bootstrap呢?...

  • UML统一建模语言简介

    UML概述 面向对象软件开发的过程: (1)OOA(面向对象分析):建立分析模型并文档化。 (2)OOD(面向对象...

  • JavaScript之对象

    什么是面向对象: ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP)。面向对象的语...

  • 第十一章 面向对象原型继承

    JavaScript有两种开发模式:1.函数化(过程化),2.面向对象(OOP)。面向对象的语言有一个标志,那就是...

  • 第三点:面向对象分析 如何把知识点消化吸收

    面向对象:★★★★★ 特点:1:将复杂的事情简单化。 2:面向对象将以前的过程中的执行者,变成了指挥者。 3:面向...

  • 面向对象

    面向对象基础 目标 理解面向对象 类和对象 添加和获取对象属性 魔法方法 一. 理解面向对象 面向对象是一种抽象化...

  • Python基础-OOP

    OOP 思想以模块化思想解决工程问题面向过程 VS 面向对象由面向过程转向面向对象 常用名词OO:面向对象OOA:...

  • Java类与对象-JVM内存分析

    面相对象-面向过程弊端不能知道是哪个主体干了些什么事情 面向对象思想 面向对象的目的:1.将复杂的事情简单化2.面...

  • js面向对象

    js面向对象(第五周) 什么是面向对象 面向对象是一种编程思想,是在面向过程编程(结构化编程)之后出现的,面向对象...

  • 面向对象

    一.面向对象和面向过程的区别: 1.性能方面:面向过程的性能比面向对象的性能高,因为面向对象需要大量的对象实例化,...

网友评论

      本文标题:[Guice] 2 面向对象化

      本文链接:https://www.haomeiwen.com/subject/hcxqjctx.html