论坛首页 Java企业应用论坛

Design Pattern (Factory Method)

浏览 2307 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-06-29  
  前言:
     每个事物,每个方法,没有是完美的,当一种目前的方法解决不了目前的问题的时候,一种模式的多种形态就产生了,在产生的同时,暴露出了以前解决方法的不足之处同时也体现出了新的解决方法的优势!所以说这完全体现了事物的完美性取决相对的环境与条件之下,他们没有好坏之分,没有优缺点之分,这些方法只是在对待相同本质的问题,但是比较复杂的情况下不适应复杂因素的改变摆了!

   工厂模式的几种形态
 

 
  
 

       [1] 简单工厂模式[Simple  Factory  Pattern]      
       [2] 工厂方法模式[Factory  Method  Pattern]
       [3] 抽象工厂模式[Abstract Factory Pattern]


  下面是本人对简单工厂模式[Simple Factory Pattern]的理解[如有错误的认识请指出]
 
[a] 就像我们平常写的一样,对于一个简单工厂模式[Simple Factory Pattern] 拥有最简单的几种方式与方法

package com.tjych.factorypattern.simplefactory;

   public interface Product {
	public void sampleMethod();

   }

        
    



  


  package com.tjych.factorypattern.simplefactory;

public class Product1 implements Product {

	@Override
	public void sampleMethod() {
		System.out.println("This is the method sampleMethod of Product1");

	}

}

   


  
  package com.tjych.factorypattern.simplefactory;

/**
 * 
 * @author 杨晨辉
 * 
 */
public class Product2 implements Product {

	@Override
	public void sampleMethod() {
		System.out.println("this is the sampleMethod of Product2");
	}

}

    

   
package com.tjych.factorypattern.simplefactory;

/**
 * 工厂类,用于产生客户希望的Product
 * 
 * @author 杨晨辉
 * 
 */
public class Factory {

	public static final int PRODUCT_PRUDCT1 = 1;
	public static final int PRODUCT_PRODUCT2 = 2;

	/**
	 * 静态的工厂方法,通过参数判断需要的是什么产品类型
	 * 
	 * @param productType
	 * @return
	 */
	public static Product createProduct(int productType) {

		switch (productType) {
		case PRODUCT_PRUDCT1: {
			return new Product1();
		}
		case PRODUCT_PRODUCT2: {
			return new Product2();
		}
		default:
			return null;
		}
	}

}

简单工厂的UML类图


  
  

       [a]如代码在,Factory类中的createFactory(int productType)方法中传递了一个int 类型的变量可以让工厂类进行根据以前的判断逻辑进行对工厂类构建产品类


  [b] 在以下的例子中我们将创建一个我自己成为具有状态的工厂模式
   

     参评类不改变
    更改一下工厂类
    package com.tjych.factorypattern.statesimplefactory;

import java.util.HashMap;
import java.util.Map;

/**
 * 工厂类,用于产生客户希望的Product
 * 
 * @author 杨晨辉
 * 
 */
public class StateFactory {

	/*#com.tjych.factorypattern.simplefactory.Product lnkProduct*/
    public static final int PRODUCT_PRODUCT1 = 1;
	public static final int PRODUCT_PRODUCT2 = 2;
	
	
	private static Map<Integer,Product> storageMap = new HashMap<Integer,Product>();
	
	

	/**
	 * 静态的工厂方法,通过参数判断需要的是什么产品类型
	 * 
	 * @param productType
	 * @return
	 */
	public static Product createProduct(int productType) {

		switch (productType) {
		case PRODUCT_PRODUCT1: {
			if(storageMap.get(PRODUCT_PRODUCT1) == null){
				return new Product1();
			}else{
				return storageMap.get(PRODUCT_PRODUCT1);
			}			
		}
		case PRODUCT_PRODUCT2: {
			if(storageMap.get(PRODUCT_PRODUCT2) == null){
				return new Product2();
			}else{
				return storageMap.get(PRODUCT_PRODUCT2);
			}			
		}
		default:
			return null;
		}
	}

}


   


   下图是图片
  




  由图可以看到本工厂类中只是改变了一下,把具有一种产品的对象的实例保存在一个小仓库中,在下次客户端使用的时候将不再重新构建,而是直接从仓库中取出,但是这种情况只是满足在系统可以要求一个产品的状态唯一, 如果系统要求构建的是不同的产品对象,侧 不能够使用这种情况,本例只是自己在构建的时候的想的!
  

  • 大小: 23 KB
  • 大小: 17 KB
  • 大小: 21.2 KB
  • 大小: 18.9 KB
   发表时间:2012-07-02  
显然这个有问题,
需要
if(storageMap.get(PRODUCT_PRODUCT1) == null){
Product1 product1 = new Product1();
storageMap.put(PRODUCT_PRODUCT1, product1);
                return   product1;
            }
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics