例子...
我們將創(chuàng)建一個有幾個類的項目。項目將以不同的格式輸出數(shù)據(jù)。我們可以選擇以CSV格式或JSON格式輸出數(shù)據(jù)。
我們將創(chuàng)建一個有幾個類的項目。項目將以不同的格式輸出數(shù)據(jù)。我們可以選擇以CSV格式或JSON格式輸出數(shù)據(jù)。...
package com.java2s.output; public interface Printer { public void print(); }
之后,我們將創(chuàng)建CSV打印機(jī),將輸出CSV格式的數(shù)據(jù)。CSV打印機(jī)實現(xiàn)打印機(jī)接口。
package com.java2s.output.impl; import com.java2s.output.Printer; public class CSVPrinter implements Printer { public void print(){ System.out.println("Csv Output Printer"); } }
然后是時間創(chuàng)建JSON打印機(jī)將輸出JSON格式的消息。JSON打印機(jī)還實現(xiàn)了打印機(jī)接口。
package com.java2s.output.impl; import com.java2s.output.Printer; public class JSONPrinter implements Printer { public void print(){ System.out.println("Json Output Printer"); } }
我們有幾種方法來使用CSVPrinter或JSONPrinter。 首先我們可以直接調(diào)用它。
package com.hgci.cnmon; import com.java2s.output.Printer; import com.java2s.output.impl.CSVPrinter; public class App { public static void main( String[] args ) { Printer output = new CSVPrinter(); output.print(); } }
這樣很容易創(chuàng)建CSVPrinter。 但是如果我們想要改變源代碼的話切換到JSONPrinter,我們將不得不更改源代碼并重新編譯。
對于上面的代碼,它很容易改變,因為它有兩行代碼。 假設(shè)我們有成千上萬代碼和CSVPrinter已被聲明了幾百次。
通過使用Spring依賴注入(DI),我們可以在Spring配置XML文件中聲明Java Bean。 然后在xml文件中連接Java Bean。這樣Spring可以使我們的打印機(jī)松散耦合到不同的打印機(jī)實現(xiàn)。
我們更改Helper類以接受打印機(jī)。
package com.java2s.output; import com.java2s.output.Printer; public class OutputHelper { Printer outputGenerator; public void print(){ outputGenerator.print(); } public void setOutputGenerator(Printer outputGenerator){ this.outputGenerator = outputGenerator; } }
然后我們要創(chuàng)建一個Spring bean配置文件并在此處聲明所有Java對象依賴關(guān)系。
<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-2.5.xsd"> <bean id="OutputHelper" class="com.java2s.output.OutputHelper"> <property name="outputGenerator" ref="csvPrinter" /> </bean> <bean id="csvPrinter" class="com.java2s.output.impl.CSVPrinter" /> <bean id="jsonPrinter" class="com.java2s.output.impl.JSONPrinter" /> </beans>
通過Spring調(diào)用它
package com.hgci.cnmon; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.java2s.output.OutputHelper; public class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml"}); OutputHelper output = (OutputHelper)context.getBean("OutputHelper"); output.print(); } }
要切換打印機(jī),我們只需要為不同的打印機(jī)更改Spring XML文件。當(dāng)Printer更改時,我們需要修改Spring XML文件。
更多建議: