论坛首页 综合技术论坛

工厂模式(Factory)

浏览 1275 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-19   最后修改:2010-04-19

工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。

为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩 展性和尽量少的修改量。

 

此例子源于需要在很多地方的姓名和电话号码上补充验证。

fixedTel = CustomerPropertyModelFactory.createTelModel(this, true);
mobile = new StringFieldModel(this, true);

 mobile为普通的创建方式,而fixedTel为我们工厂创建出来的。我们依然是new出来了对象,而工厂CustomerPropertyModelFactory对其进行了加工。

public class CustomerPropertyModelFactory {
	public static StringFieldModel createCustomerNameModel(
			CompositeModel parent, boolean required) {
		return createCustomerNameModel(parent, null, null, required);
	}

	public static StringFieldModel createCustomerNameModel(CompositeModel parent,Object target,String fieldName, boolean required){
		StringFieldModel customerName = new StringFieldModel(parent,target,fieldName,required);
		if(Configuration.isSameValueTo(ConfigurationCode.TRUE, ConfigurationCode.IS_VALIDATE_NAME)){
			customerName.addFieldValidator(new NameValidator());
		}
		return customerName;
	} 

	public static StringFieldModel createTelModel(CompositeModel parent, boolean required){
		return createTelModel(parent, null, null, required);
	}

	public static StringFieldModel createTelModel(CompositeModel parent,
			Object target, String fieldName, boolean required) {
		StringFieldModel tel = new StringFieldModel(parent, target, fieldName,
				required);
		if (Configuration.isSameValueTo(ConfigurationCode.TRUE,
				ConfigurationCode.IS_VALIDATE_TELE_IS_NUMBER)) {
			tel.addFieldValidator(new NumberValidator());
		}
		return tel;
	}

	static class NameValidator implements IFieldValidator {
		public String isValid(Object value) {
			String cmtsUsingDHCPUserName = (String) value;

			if (cmtsUsingDHCPUserName == null
					|| "".equals(cmtsUsingDHCPUserName)) { //$NON-NLS-1$
				return null;
			}
			if (cmtsUsingDHCPUserName.matches("[0-9A-Za-z\\s]*")) { //$NON-NLS-1$
				return null;
			}
			return new Messages()
					.getString("ModifyBroadbandLoginSectionModel.0");
		}
	}

}
论坛首页 综合技术版

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