1. 程式人生 > >java設計模式之factory模式

java設計模式之factory模式

得到 裏的 schema java設計 pack factory 時代 ext 根據

factory模式:即工廠模式,工廠大家應該很了解,主要是根據用戶需求生產產品的,舉個在學生時代很親近生活的簡單例子,如:中午下課了和同學們一起去食堂吃飯,走到xxx食堂窗口,裏面阿姨會問吃什麽、然後你會說吃什麽什麽的,完了阿姨會和廚子去溝通我們所需要的東西,我們完全不用考慮我們需要的xxx是怎麽做的,我們只需要等結果就可以了,當然食堂裏面有很多同學,需要的都是各不相同的,那麽這裏的食堂可以簡單的理解為"工廠"。直接進入代碼部分:

一、產品接口的定義:墨盒(接口)

 1 package edu.aeon.model.factory;
 2 /**
 3  * 
 4  * @author lzj
5 * @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 public
class 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 implements
Ink { 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模式