java設計模式之factory模式
阿新 • • 發佈:2017-10-23
得到 裏的 schema java設計 pack factory 時代 ext 根據
factory模式:即工廠模式,工廠大家應該很了解,主要是根據用戶需求生產產品的,舉個在學生時代很親近生活的簡單例子,如:中午下課了和同學們一起去食堂吃飯,走到xxx食堂窗口,裏面阿姨會問吃什麽、然後你會說吃什麽什麽的,完了阿姨會和廚子去溝通我們所需要的東西,我們完全不用考慮我們需要的xxx是怎麽做的,我們只需要等結果就可以了,當然食堂裏面有很多同學,需要的都是各不相同的,那麽這裏的食堂可以簡單的理解為"工廠"。直接進入代碼部分:
一、產品接口的定義:墨盒(接口)
1 package edu.aeon.model.factory; 2 /** 3 * 4 * @author lzj5 * @create 2017年10月22日 上午2:54:13 6 * @describe 墨盒接口的定義 7 */ 8 public interface Ink { 9 //打印墨盒顏色 10 public String getColor(); 11 }
二、產品1的定義:彩色墨盒
1 package edu.aeon.model.factory; 2 /** 3 * 4 * @author lzj 5 * @create 2017年10月22日 上午2:54:30 6 * @describe ColorInk實現Ink 7 */ 8 publicclass ColorInk implements Ink { 9 10 @Override 11 public String getColor() { 12 return "使用彩色墨盒打印"; 13 } 14 15 }
三、產品2的定義
1 package edu.aeon.model.factory; 2 /** 3 * 4 * @author lzj 5 * @create 2017年10月22日 上午2:54:49 6 * @describe GreyInk實現Ink 7 */ 8 public class GreyInk implementsInk { 9 10 @Override 11 public String getColor() { 12 return "使用灰色墨盒打印"; 13 } 14 15 }
四、生產墨盒類產品的工廠
1 package edu.aeon.model.factory; 2 /** 3 * 4 * @author lzj 5 * @create 2017年10月22日 上午2:56:22 6 * @describe Ink工廠的實現 7 */ 8 public class InkFactory { 9 public Ink getInk(String str){ 10 //根據參數返回Ink接口的實例 11 if(str.equalsIgnoreCase("color")){ 12 return new ColorInk(); 13 }else{ 14 return new GreyInk(); 15 } 16 17 } 18 }
五、測試產品
a):普通類測試代碼
1 package edu.aeon.model.factory.test; 2 3 import edu.aeon.model.factory.Ink; 4 import edu.aeon.model.factory.InkFactory; 5 6 /** 7 * @author lzj 8 * @create 2017年10月22日 上午2:59:33 9 * @describe 墨盒工廠測試類 10 * 當需要彩色墨盒時生產彩色墨盒對象 11 * 當需要灰色墨盒時生產灰色墨盒對象 12 */ 13 public class FactoryTest { 14 15 /** 16 * at 2017年10月22日 上午2:59:33 by lzj 17 * @Parameters1 String[] args 18 * @Returns void 19 */ 20 public static void main(String[] args) { 21 //創建InkFactory的實例,獲得工廠實例 22 InkFactory factory=new InkFactory(); 23 Ink p=null; 24 //使用工廠獲得彩色墨盒對象 25 p=factory.getInk("color"); 26 System.out.println(p.getColor()); 27 System.out.println("================="); 28 //使用工廠獲得灰色墨盒對象 29 p=factory.getInk("grey"); 30 System.out.println(p.getColor()); 31 } 32 33 }
測試結果為:
b):通過配置文件
配置文件配置代碼如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 8 http://www.springframework.org/schema/tx 9 http://www.springframework.org/schema/tx/spring-tx-2.0.xsd 10 http://www.springframework.org/schema/aop 11 http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> 12 <bean id="color" class="edu.aeon.model.factory.ColorInk" /> 13 <bean id="grey" class="edu.aeon.model.factory.GreyInk" /> 14 </beans>
具體測試類:
1 package edu.aeon.model.factory.test; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 import edu.aeon.model.factory.ColorInk; 6 import edu.aeon.model.factory.GreyInk; 7 import edu.aeon.model.factory.Ink; 8 /** 9 * @author lzj 10 * @create 2017年10月22日 上午3:10:39 11 * @describe 通過配置文件得到具體產品的對象 12 */ 13 public class FactoryTestByXML { 14 15 /** 16 * at 2017年10月22日 上午3:10:39 by lzj 17 * @Parameters1 String[] args 18 * @Returns void 19 */ 20 public static void main(String[] args) { 21 ApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContext.xml"); 22 Ink cl = (ColorInk) cxt.getBean("color"); 23 Ink gr = (GreyInk) cxt.getBean("grey"); 24 System.out.println(cl.getColor()); 25 System.out.println("===================="); 26 System.out.println(gr.getColor()); 27 } 28 }
測試結果為:
java設計模式之factory模式