博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虐心,Hello World
阅读量:7084 次
发布时间:2019-06-28

本文共 2806 字,大约阅读时间需要 9 分钟。

前言

无意中在知乎上看到了一个很有意思的回答:题目是:如何把一段简单的代码变复杂?

答主的回答当然是为了调侃。不过我觉得这倒是一个比较好玩的主题。Hello World作为我们编程语言入门的内容,是一个很简单很简单的一行代码。但是,当我们结合设计模式,抽象、多态、封装...的概念之后,我们的Hello World就变得异常的复杂。

今天就让我们从简单的Hello World,一步步进化成“花里胡哨”的Hello World。

开始

开始之前,为了文章的娱乐性,整俩个小角色:刚开始学习编程的小A,以及吃不上饭的Android开发MDove。

Mdove:小A啊,Java也学了很久了。Hello World会不会写啊?

小A:必须会,我Hello World写的贼6~

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

MDove:兄dei,这样写怎么能体现面向对象的思想?你得抽成一个对象啊!

小A:说得对,说得对!必须抽。

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

MDove:这样怎么能行呢?fun方法可能会有多种实现呐,不一定只输出Hello World。万一需求让输出Hello Java咋整?不能光面向对象,还得学会抽象。是不是得抽一个接口出来?使用的时候,具体类去具体实现?!

小A:dei,dei,dei,说的dei。必须上接口。

public class HelloWorldMain {    public static void main(String[] args) {    new HelloWorld().fun();    }}public class HelloWorld implements IHelloWorld{    @Override    public void fun(){    System.out.println("Hello World");    }}public interface IHelloWorld {    void fun();}

MDove:抽象是抽象出来了,当时这样new出来对象,实在是太low了。让我们加个设计模式,就用简单工厂了。

小A:好好好,大哥说什么都对。

public class HelloWorldMain {    public static void main(String[] args) {    new SayHelloFactory().create().fun();    }}public class SayHelloFactory {    public IHelloWorld create(){        return new HelloWorld();    }}

MDove:不行不行,这样还是去new对象。耦合度是在是太高!我们这样做:把我们要初始化的对象写在xml里,然后通过反射去new这个对象!

小A:好呀,好呀!(MMP)

public class HelloWorldMain {    public static void main(String[] args) {        //省略try-catch    Class object=Class.forName("从文件中得到需要加载的类路径");    Constructor constructor=object.getConstructor(null);    Object helloWorld=constructor.newInstance(null);    Method sayHellod=object.getMethod("fun", null);    sayHellod.invoke(helloWorld, null);    }}

MDove:不行!这么写不够高端。咱们用动态代理,这样咱们就能够对咱们的类有足够强的控制力和拓展力!

小A:......(怎样动手能算是“正当防卫”呢?)

public class HelloWorldMain {    public static void main(String[] args) {        Class object = Class.forName("com.HelloWorld");    Constructor constructor = object.getConstructor(null);    final Object helloWorld = constructor.newInstance(null);        IHelloWorld iHelloWorld = (IHelloWorld) Proxy.newProxyInstance(helloWorld.getClass().getClassLoader(),        helloWorld.getClass().getInterfaces(), new InvocationHandler(){        @Override        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {                return method.invoke(helloWorld, null);        }    });    iHelloWorld.fun();    }}

MDove:这样勉强还不错,不过每次都这么写太麻烦。我们封装一个框架让它能够帮我们处理这些内容!让我们参考Spring写一个吧!

小A:饿错咧,饿真滴错咧,饿从一开始就不应该学Java...饿如果不学Java,饿就会有一头乌黑亮丽的头发...

MDove:别呀,Java多好玩啊。别走啊...

这里是一帮应届生共同维护的公众号,内容是我们在从应届生过渡到开发这一路所踩过的坑,以及我们一步步学习的记录,如果感兴趣的朋友可以关注一下,一同加油,一同努力

img_39e544ceb47ae92ede4c13f05f18ed09.png
个人公众号:IT面试填坑小分队

转载地址:http://dpmml.baihongyu.com/

你可能感兴趣的文章
IP分片如何分片?如何组装?三位标志分别是哪三位?
查看>>
我的友情链接
查看>>
EOS数据持久性(上)
查看>>
UI Action中Action name需保持有效的可读性和唯一性
查看>>
Java IO(三)——字节流
查看>>
真正的inotify+rsync实时同步 彻底告别同步慢
查看>>
MariaDB数据库用户和权限管理
查看>>
程序员辞职卖卷饼,4天挣了1个月工资……所以我应该改行卖卷饼吗?
查看>>
作业:Rsync+shell脚本完成自动化备份
查看>>
DKH企业级大数据解决方案的优势介绍
查看>>
arm嵌入式培训学校浅聊单片机、ARM、FPGA 、嵌入式开发的特点
查看>>
lvs+keepalived原理
查看>>
windows安装
查看>>
C实现2台主机间的passwordLess,基于配置文件批量建立主机之间的passwordless
查看>>
私有云桌面和公有云桌面的区别是什么
查看>>
ipmotool
查看>>
国家级期刊投稿要求
查看>>
mpls的基础原理
查看>>
大数据开发零基础需要学习什么内容?(1)Java、大数据基础
查看>>
SecureCRT教程——如何使用SecureCRT命令窗口将命令发送到多个会话
查看>>