例子...
我們將創(chuàng)建一個(gè)有幾個(gè)類(lèi)的項(xiàng)目。項(xiàng)目將以不同的格式輸出數(shù)據(jù)。我們可以選擇以CSV格式或JSON格式輸出數(shù)據(jù)。
我們將創(chuàng)建一個(gè)有幾個(gè)類(lèi)的項(xiàng)目。項(xià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ī)實(shí)現(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"); } }
然后是時(shí)間創(chuàng)建JSON打印機(jī)將輸出JSON格式的消息。JSON打印機(jī)還實(shí)現(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"); } }
我們有幾種方法來(lái)使用CSVPrinter或JSONPrinter。 首先我們可以直接調(diào)用它。
package com.www.15014759268.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。 但是如果我們想要改變?cè)创a的話切換到JSONPrinter,我們將不得不更改源代碼并重新編譯。
對(duì)于上面的代碼,它很容易改變,因?yàn)樗袃尚写a。 假設(shè)我們有成千上萬(wàn)代碼和CSVPrinter已被聲明了幾百次。
通過(guò)使用Spring依賴(lài)注入(DI),我們可以在Spring配置XML文件中聲明Java Bean。 然后在xml文件中連接Java Bean。這樣Spring可以使我們的打印機(jī)松散耦合到不同的打印機(jī)實(shí)現(xiàn)。
我們更改Helper類(lèi)以接受打印機(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; } }
然后我們要?jiǎng)?chuàng)建一個(gè)Spring bean配置文件并在此處聲明所有Java對(duì)象依賴(lài)關(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>
通過(guò)Spring調(diào)用它
package com.www.15014759268.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更改時(shí),我們需要修改Spring XML文件。
更多建議: