【1】首先我们来了解下,什么叫做耦合

        耦合:指的是程序之间的依赖关系{包括类之间的依赖和方法间的依赖}

        例如,我们常用的new 就是一种耦合,以及一个类调用另一个类中的方法,也是耦合

【2】解耦

        解耦:就是降低程序之间的耦合关系,但是并不能消除

        在实际的开发中:我们应该做到编译器不依赖,运行期依赖

【3】解决思路

        1.使用反射来创建对象,避免使用new关键字

        2.通过读取配置文件来获取要创建的对象的全限定类名

activity android 解耦 java解耦_activity android 解耦

      

         我们先创建出一个bean.properties配置文件,以后在Spring中是要用到xml的,这里是测试,所以用properties。

        

activity android 解耦 java解耦_java_02

         在这里面写上,两个实现类的全限定类名。

         因为我们需要进行在类中调用实体类,把new关键字消除的操作。

         就需要实例化对象

        

activity android 解耦 java解耦_activity android 解耦_03

          在工厂类中,我们需要先读取我们的bean.properties文件,然后用load方法读取加载

          之后就是实例化我们的实现类对象的代码

          这里最重要的一点就是Class.forName的用法,这个方法是返回一个类,然后再                              Class.newInstance创建对象,来代替创建对象时的new关键字。

        注意:forName中的字符串,必须包含我们所需要创建类的包名和类名

                     也就是我们bean.properties中写的

          这样我们就得到了我们需要的实体类对象

          我们返回到我们的service实体类中

                

activity android 解耦 java解耦_activity android 解耦_04

          同理,我们最后的前端模拟类也可以这么使用

注意:因为我们在工厂中getBean方法中返回的是Object类型,这个都需要强转

        

activity android 解耦 java解耦_activity android 解耦_05

         这里大家需要知道,这个靠newInstance出来的对象,每次打印的地址值都不同,所以是多例的,如果我们想得到单例的对象,怎么办?

         既然我们调用BeanFactory的方法时,每次都是新的对象,那么我们就可以在工厂中,把对象存入到一个容器中,然后每次调用,就从容器中拿就可以了。

        

activity android 解耦 java解耦_开发语言_06

         这样我们在自定义方法中,就可以,return beans.get(name);即可