Spring 松耦合實例

假定我們現在需要輸出不同格式文件,傳統實現方式如下:

1 創建輸出文件接口IGenerateFile.java

package com.xidian.edu;

public interface IGenerateFile {
    public void generateFile();
}

2 創建TxtGenerateFile.java、XmlGenerateFile.java實現IGenerateFile接口

package com.xidian.edu;

public class TxtGenerateFile implements IGenerateFile{

    @Override
    public void generateFile() {
        System.out.println("***Generate Txt File***");
    }
}
package com.xidian.edu;

public class XmlGenerateFile implements IGenerateFile{
    @Override
    public void generateFile() {
        System.out.println("***Generate Xml File***");
    }
}


3 創建GenerateFileHelper類,產生相應對象,此類的作用是當需要調用的對象發生變化時只需要在Helper類中改變生成的對象,例如代碼中需要從TxtGenerteFile轉換爲XmlGenerateFile類型,此時只需要改變Helper中的代碼,而不需要改變調用對象處的代碼。

public class GenerateFileHelper {
    public IGenerateFile generateFile;
    public GenerateFileHelper(){
        generateFile=new TxtGenerateFile();
    }
    public void generateFile(){
        generateFile.generateFile();
    }
}

4 Main 函數調用

package com.xidian.edu;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AppMain {
    public static void main(String args[]){
        /***tranditional implement***/
        GenerateFileHelper helper=new GenerateFileHelper();
        helper.generateFile();

        /***Spring inplement***/
        ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"GenerateFile.xml"});
        GenerateFileHelperForSpring iGenerateFile=(GenerateFileHelperForSpring)context.getBean("generateFileHelper");
        iGenerateFile.generateFile();
    }
}


雖然Helper類在一定程度降低了類對象之間的耦合性,但是Helper類與其它對象之間依然存在較強耦合性,以下介紹引入Spring框架解決對象之間依賴關係強導致的對象之間耦合性。

1 引入GenerateFileHelperForSpring

package com.xidian.edu;

public class GenerateFileHelperForSpring {
    IGenerateFile iGenerateFile;
    public void generateFile(){
        iGenerateFile.generateFile();
    }

    public void setiGenerateFile(IGenerateFile iGenerateFile) {
        this.iGenerateFile = iGenerateFile;
    }
}

2 引入GenerateFile.xml,由xml文件指定對象生成.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="generateFileHelper" class="com.xidian.edu.GenerateFileHelperForSpring">
        <property name="iGenerateFile" ref="xmlGenerateFile"></property>
    </bean>
    <bean id="txtGenerateFile" class="com.xidian.edu.TxtGenerateFile"></bean>
    <bean id="xmlGenerateFile" class="com.xidian.edu.XmlGenerateFile"></bean>
</beans>

這樣處理的好處是隻需要修改xml文件就可以產生不同對象,而不需要改動代碼,耦合性大大降低.

目錄結構如下:


運行結果截圖:













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章