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;
// }
}
分享到:
相关推荐
narrowingConversion_1.java 缩减转换引发错误示例1 narrowingConversion_2.java 缩减转换引发错误示例2 notMultipleOfThree.java 把100-200之间不能被3整除的数输出 outputByDoWhile.java 用while循环随机输出...
例如,鸭子对象的叫、飞、外形这三个措施,可以提取到鸭父类中,让每个鸭子都继承这个鸭父类,重写这三个措施。 c) 工厂模式: 工厂模式是一种创建型模式,提供一个统一的接口来获取实例对象的引用。例如,登录...
Java 面向对象编程(OOP)是指使用封装、继承和多态三大特性来描述现实世界的事物。 封装 封装是将对象的数据和方法结合,由方法将对象的数据实现,并实现对象的数据隐藏。 继承 继承是子类继承父类的变量和方法...
- 运行时多态主要指继承父类和实现接口时,可使父类引用指向子类对象。 - 运行时多态的实现:主要依靠方法表,方法表中最先存放的是 Object 类的方法,接下来是该类的父类的方法,最后是该类本身的方法。如果子类...
Java 是一种广泛应用于软件开发的编程语言,本文总结了 Java 基础知识点,涵盖了运算符、变量、函数、数组、面向对象编程、接口、多态、继承、封装、final 关键字等方面的知识点。 1. 运算符:Java 提供了多种...
本资源是一个Java基础笔试题集合,涵盖了Java语言的多个方面,包括运算符、变量、函数、数组、面向对象编程、继承、封装、多态等。以下是对每个问题的详细解释: 1. Java提供哪几种运算符? Java提供了多种运算符,...
17.3.1. 在基本数据类型和封装类之间的自动转换 17.4. 类型安全的枚举 17.5. 静态引入 17.6. C风格的格式化输出 17.7. Building Strings(StringBuilder类) 17.8. 可变长的参数 17.9. JAVA5.0 的注释 (Annotation...
18. 封装:将数据以及对数据的操作组合成一个类,但这个类能够提供与外部联系的方法又能够隐藏实现的细节,封装是 Java 语言中的一种基本概念。 19. 构造方法:创建类的一个实例并对实例的成员进行初始化,构造方法...
在第三章 面向对象的概念和 JAVA 实现中,我们学习了面向对象编程的基本概念,包括类、对象、继承、多态性、封装等。 在 JAVA 中,对象是拥有属性和行为或方法的实体。 在 JAVA 中,对象的特性在类中表示为变量,...
Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble ...
本章主要介绍了Java中类的继承、封装、多态、方法的覆盖、抽象类、接口及内部类等面向对象的高级特性。通过本章的学习,学员应该掌握如下知识: 1. 类的继承:包括继承的规则、继承的语法、子类的构造器、super和...
Java面向对象 1 1 学习方法与要求 1 2 面向对象语言与面向过程语言的区别 7 3 面向对象?什么对象? 8 4 什么是类? 9 5 如何创建一个类Class? 10 6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 ...
第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编程中事件处理模式。 30.你编写过applet吗?applet的安全权限如何?试列举java application或者applet中与servlet/jsp通信可以采用的方式。 31.简述逻辑操作(如&,|)与条件操作(如&&,||)的区别。 32....
最近正在学习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篇 ...
JAVA 面向对象的三大特性是封装、继承、多态。封装是指将数据和方法封装在一起,继承是指子类继承父类的属性和方法,多态是指一个对象可以具有多种形式。 sleep() 和 wait() 的区别 sleep() 和 wait() 都是 Thread...
1. int 是 Java 的基本数据类型,Integer 是 Java 为 int 提供的封装类。 异常处理 1. Exception 是 Java 的异常处理机制, RuntimeException 是运行时异常,throws 和 throw 是抛出异常的关键字,Error 是错误...
2. 面向对象三大特性:继承、封装、多态。 3. 多态机制:Java 语言通过方法重写和方法重载来实现多态机制。 4. 类和接口:类是对象的模板,接口是类的抽象化。 5. 抽象类和接口的对比:抽象类可以继承其他类,接口不...