`
numen06
  • 浏览: 75692 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JAVA装饰模式,封装父类,提供转换接口(三)

阅读更多
http://numen06.iteye.com/blog/1428067
http://numen06.iteye.com/blog/1439763
上一篇文章已经将封装转换类,独立出来并作为一个类来进行。

在实际运用过程的中会遇到初始化的时候先后问题,所以将装换借口直接做成static只是作为工具类运用。

package com.wesley.framework.decoration;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.MapUtils;

import com.wesley.framework.commen.ArrayUtil;
import com.wesley.framework.commen.ObjectUtil;
import com.wesley.framework.commen.reflect.ClassUtil;
import com.wesley.framework.commen.reflect.ReflectionUtils;

public class DecoratorFactory {

	@SuppressWarnings({ "unchecked"})
	public synchronized static <Model, Decor extends Decorator<Model>, SuperDec extends Decorator<?>> Decor exchange(
			SuperDec superDec, Class<Decor> clazz, String propertyName,
			String... params) {
		Decor decor = null;
		try {
			decor = ClassUtil.newInstance(clazz);
			Model model = (Model) ReflectionUtils.invokeGetterMethod(
					superDec.getModel(), propertyName);
			if (ObjectUtil.isEmpty(model)) {
				ReflectionUtils.invokeSetterMethod(superDec, propertyName,
						decor);
				return decor;
			}
			Map<String, String> map = ArrayUtil.toMap(params);
			if (!MapUtils.isEmpty(map))
				BeanUtils.populate(decor, map);
			decor.setModel(model);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return decor;
	}

	public synchronized static <Model, Decor extends Decorator<Model>> Decor exchange(
			Class<Decor> clazz, Model model, String... params) {
		Decor decor = null;
		try {
			if (ObjectUtil.isEmpty(model))
				return null;
			decor = ClassUtil.newInstance(clazz);
			Map<String, String> map = ArrayUtil.toMap(params);
			if (!MapUtils.isEmpty(map))
				BeanUtils.populate(decor, map);
			decor.setModel(model);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return decor;
	}

	@SuppressWarnings("unchecked")
	public static <Model, Decor extends Decorator<Model>> List<Decor> exchange(
			Decor dec, Collection<Model> models, String... params) {
		List<Decor> decorList = new ArrayList<Decor>();
		try {
			for (Model model : models) {
				decorList.add((Decor) DecoratorFactory.exchange(dec.getClass(),
						model, params));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return decorList;
	}

	public static <Model, Decor extends Decorator<Model>> List<Decor> exchange(
			Class<Decor> clazz, Collection<Model> models, String... params) {
		List<Decor> decorList = new ArrayList<Decor>();
		try {
			for (Model model : models) {
				decorList.add(DecoratorFactory.exchange(clazz, model, params));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return decorList;
	}

	public static <Model, Decor extends Decorator<Model>> Set<Model> exchange(
			Collection<Decor> decs, String... params) {
		Set<Model> decorList = new HashSet<Model>();
		try {
			for (Decor dec : decs) {
				Model model = dec.getModel();
				Map<String, String> map = ArrayUtil.toMap(params);
				if (!MapUtils.isEmpty(map))
					BeanUtils.populate(model, map);
				decorList.add(model);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return decorList;
	}

}

package com.wesley.framework.decoration;

import org.apache.struts2.json.annotations.JSON;

import com.wesley.framework.commen.reflect.GenericsUtils;

@SuppressWarnings("serial")
public abstract class DecoratorModel<Model> implements Decorator<Model> {

	private Model model;

	// protected DecoratorHelper<Model, ? extends Decorator<Model>> helper;

	/**
	 * 装饰器构造函数,如果没有自动创建一个实体
	 */
	@SuppressWarnings("unchecked")
	public DecoratorModel() {
		super();
		try {
			Class<Model> cls = GenericsUtils.getSuperClassGenricType(
					this.getClass(), 0);
			this.setModel(cls.newInstance());
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param model
	 *            将实体封装进入装饰器
	 */
	public DecoratorModel(Model model) {
		super();
		this.setModel(model);
	}

	@JSON(serialize = false)
	@Override
	public final Model getModel() {
		return this.model;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.wesley.framework.decoration.Decorator#setModel(java.lang.Object)
	 * 装饰器接口,将Model注入到装饰器中
	 */
	@Override
	public void setModel(Model model) {
		this.model = model;
		// helper = new DecoratorHelper<Model,Decorator<Model>>(
		// (Class<Decorator<Model>>) this.getClass());
	}

	// /*
	// * (non-Javadoc)
	// *
	// * @see
	// *
	// com.wesley.framework.decoration.Decoration#baseExchange(java.lang.Object)
	// *
	// * 反射必有参数构造函数,将实体包含在装饰器之中
	// */
	// @SuppressWarnings("unchecked")
	// @Override
	// public Decor baseExchange(Model model) {
	// Decor decor = null;
	// try {
	// decor = (Decor) this.getClass().getConstructor(model.getClass())
	// .newInstance(model);
	// } catch (InstantiationException e) {
	// e.printStackTrace();
	// } catch (IllegalAccessException e) {
	// e.printStackTrace();
	// } catch (IllegalArgumentException e) {
	// e.printStackTrace();
	// } catch (SecurityException e) {
	// e.printStackTrace();
	// } catch (InvocationTargetException e) {
	// e.printStackTrace();
	// } catch (NoSuchMethodException e) {
	// e.printStackTrace();
	// }
	// decor.setModel(model);
	// return decor;
	// }
	//
	// /*
	// * (non-Javadoc)
	// *
	// * @see
	// *
	// com.wesley.framework.decoration.Decoration#baseExchange(java.util.Collection
	// * 转换List等Collection接口数据
	// */
	// @Override
	// public List<Decor> baseExchange(Collection<Model> models) {
	// List<Decor> decorList = new ArrayList<Decor>();
	// for (Model model : models) {
	// decorList.add(this.baseExchange(model));
	// }
	// return decorList;
	// }

}
2
1
分享到:
评论

相关推荐

    Java开发技术大全(500个源代码).

    narrowingConversion_1.java 缩减转换引发错误示例1 narrowingConversion_2.java 缩减转换引发错误示例2 notMultipleOfThree.java 把100-200之间不能被3整除的数输出 outputByDoWhile.java 用while循环随机输出...

    2022年最新java面试题技术面试.docx

    例如,鸭子对象的叫、飞、外形这三个措施,可以提取到鸭父类中,让每个鸭子都继承这个鸭父类,重写这三个措施。 c) 工厂模式: 工厂模式是一种创建型模式,提供一个统一的接口来获取实例对象的引用。例如,登录...

    Java程序设计课程学习总结与心得

    Java 面向对象编程(OOP)是指使用封装、继承和多态三大特性来描述现实世界的事物。 封装 封装是将对象的数据和方法结合,由方法将对象的数据实现,并实现对象的数据隐藏。 继承 继承是子类继承父类的变量和方法...

    Java 八股文背诵版(113 道)

    - 运行时多态主要指继承父类和实现接口时,可使父类引用指向子类对象。 - 运行时多态的实现:主要依靠方法表,方法表中最先存放的是 Object 类的方法,接下来是该类的父类的方法,最后是该类本身的方法。如果子类...

    java基础笔试题答案已整理.docx

    Java 是一种广泛应用于软件开发的编程语言,本文总结了 Java 基础知识点,涵盖了运算符、变量、函数、数组、面向对象编程、接口、多态、继承、封装、final 关键字等方面的知识点。 1. 运算符:Java 提供了多种...

    java基础笔试题(答案已整理).doc

    本资源是一个Java基础笔试题集合,涵盖了Java语言的多个方面,包括运算符、变量、函数、数组、面向对象编程、继承、封装、多态等。以下是对每个问题的详细解释: 1. Java提供哪几种运算符? Java提供了多种运算符,...

    corejava培训文档

    17.3.1. 在基本数据类型和封装类之间的自动转换 17.4. 类型安全的枚举 17.5. 静态引入 17.6. C风格的格式化输出 17.7. Building Strings(StringBuilder类) 17.8. 可变长的参数 17.9. JAVA5.0 的注释 (Annotation...

    java考试题库(大二期末考试必备).doc

    18. 封装:将数据以及对数据的操作组合成一个类,但这个类能够提供与外部联系的方法又能够隐藏实现的细节,封装是 Java 语言中的一种基本概念。 19. 构造方法:创建类的一个实例并对实例的成员进行初始化,构造方法...

    JAVA面向对象程序设计练习题库

    在第三章 面向对象的概念和 JAVA 实现中,我们学习了面向对象编程的基本概念,包括类、对象、继承、多态性、封装等。 在 JAVA 中,对象是拥有属性和行为或方法的实体。 在 JAVA 中,对象的特性在类中表示为变量,...

    java 面试题 总结

    Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble ...

    JAVA编程基础_06面向对象高级特性.doc

    本章主要介绍了Java中类的继承、封装、多态、方法的覆盖、抽象类、接口及内部类等面向对象的高级特性。通过本章的学习,学员应该掌握如下知识: 1. 类的继承:包括继承的规则、继承的语法、子类的构造器、super和...

    JAVA面向对象详细资料

    Java面向对象 1 1 学习方法与要求 1 2 面向对象语言与面向过程语言的区别 7 3 面向对象?什么对象? 8 4 什么是类? 9 5 如何创建一个类Class? 10 6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 ...

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...

    JAVA面试题最全集

    简述java编程中事件处理模式。 30.你编写过applet吗?applet的安全权限如何?试列举java application或者applet中与servlet/jsp通信可以采用的方式。 31.简述逻辑操作(如&,|)与条件操作(如&&,||)的区别。 32....

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    java学习笔记 初学者必读

    17.3.1. 在基本数据类型和封装类之间的自动转换 17-69 17.4. 类型安全的枚举 17-70 17.5. 静态引入 17-71 17.6. C风格的格式化输出 17-72 17.7. Building Strings(StringBuilder类) 17-73 17.8. 可变长的参数 17-73 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    对Java语言的每个语法都提供了一个或多个例程讲解 大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 ...

    2023年JAVA面试题资料.doc

    JAVA 面向对象的三大特性是封装、继承、多态。封装是指将数据和方法封装在一起,继承是指子类继承父类的属性和方法,多态是指一个对象可以具有多种形式。 sleep() 和 wait() 的区别 sleep() 和 wait() 都是 Thread...

    java面试题汇总,基本是初级中级问题

    1. int 是 Java 的基本数据类型,Integer 是 Java 为 int 提供的封装类。 异常处理 1. Exception 是 Java 的异常处理机制, RuntimeException 是运行时异常,throws 和 throw 是抛出异常的关键字,Error 是错误...

    Java综合面试资料集

    2. 面向对象三大特性:继承、封装、多态。 3. 多态机制:Java 语言通过方法重写和方法重载来实现多态机制。 4. 类和接口:类是对象的模板,接口是类的抽象化。 5. 抽象类和接口的对比:抽象类可以继承其他类,接口不...

Global site tag (gtag.js) - Google Analytics