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

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

阅读更多
http://numen06.iteye.com/blog/1428067
上一篇文章提到了装饰类的父类,对于一些基本功能的封装。
在实际运用过程中,带的类型有两个太复杂, 不利于装饰类的扩展。
所以功能和装饰类区分,以便更好的扩展。

package com.wesley.framework.decoration;

import java.util.Collection;
import java.util.List;

public interface Decoration<Model, Decor extends Decorator<Model>> {

	public List<Decor> baseExchange(Collection<Model> models);

	public Decor baseExchange(Model model);

}

package com.wesley.framework.decoration;

public interface Decorator<T> extends java.io.Serializable {

	public void setModel(T model);

	public T getModel();
}

package com.wesley.framework.decoration;

import com.wesley.framework.commen.GenericsUtils;

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

	protected 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);
	}

	@Override
	public Model getModel() {
		return 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;
	// }

}
package com.wesley.framework.decoration;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class DecoratorHelper<Model, Decor extends Decorator<Model>> implements
		Decoration<Model, Decor> {

	private Class<Decor> clazz;

	public DecoratorHelper(Class<Decor> dec) {
		super();
		this.clazz = dec;
	}

	@SuppressWarnings("unchecked")
	public DecoratorHelper(Decor dec) {
		super();
		this.clazz = (Class<Decor>) dec.getClass();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.wesley.framework.decoration.Decoration#baseExchange(java.lang.Object)
	 * 
	 * 反射必有参数构造函数,将实体包含在装饰器之中
	 */
	@Override
	public Decor baseExchange(Model model) {
		Decor decor = null;
		try {
			decor = clazz.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;
	}
}
1
0
分享到:
评论

相关推荐

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

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

    corejava培训文档

    4.5. 转换的二种类型 4.6. 控制流 4.7. 循环语句 5. 四 数组 5.1. 声明数组 5.2. 创建数组 5.3. 初始化数组 5.4. 多维数组 5.5. 数组拷贝 6. 五 对象和类 6.1. 面向对象与面向过程 6.2. 对象的概念 ...

    JAVA面试题最全集

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

    java 面试题 总结

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

    java初学者必看

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

    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学习笔记 初学者必读

    4.5. 转换的二种类型 4-8 4.6. 控制流 4-8 4.7. 循环语句 4-8 5. 四•数组 5-9 5.1. 声明数组 5-9 5.2. 创建数组 5-9 5.3. 初始化数组 5-10 5.4. 多维数组 5-10 5.5. 数组拷贝 5-10 6. 五•对象和类 6-11 6.1. 面向...

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

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

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

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

    超级有影响力霸气的Java面试题大全文档

    Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double ...

    DbUtils应用开发例子--DbUtilsExample.zip

    Apache Common DbUtils是操作数据库的组件,对传统操作数据库的类(JDBC)进行二次封装,可以把结果集转化成List。 DbUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 应用实践小结: 一、...

    Java之IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输...

    java面试题

    答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装类。 String和StringBuffer的区别? 答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新...

    corejavaNoteBook

    4.5. 转换的二种类型 4-8 4.6. 控制流 4-8 4.7. 循环语句 4-8 5. 四•数组 5-9 5.1. 声明数组 5-9 5.2. 创建数组 5-9 5.3. 初始化数组 5-10 5.4. 多维数组 5-10 5.5. 数组拷贝 5-10 6. 五•对象和类 6-11 6.1. 面向...

    整理后java开发全套达内学习笔记(含练习)

    Encapsulation[java] 封装 (hiding implementation details) Exception [java] 例外; 异常 [ik'sepʃәn] entry n.登录项, 输入项, 条目['entri] enum (关键字) execute vt.执行 ['eksikju:t] exhibit v.显示, ...

    21天学会Java之(Java SE第五篇):继承、常用的关键字、封装及权限修饰符、多态

    文章目录继承常用的关键字this关键字static关键字super关键字final关键字封装及权限修饰符封装的作用及其优点权限修饰符封装的使用细节多态多态的概念多态的使用要点对象的转型instanceof运算符类型自动提升及强制...

    Kotlin语法实战与Android应用笔记.docx

    讲述了Kotlin语言是一种强类型语言,所有数据类型都是类封装的,数据类型不能隐式转换,必须显式变换。 2、详细地介绍了Kotlin的各种类,比如数据类、枚举类、密封类,类的继承,类的多态性,类的主构造函数与次构造...

    java经典面试2010集锦100题(不看你后悔)

    B) 在Java中布尔类型不能和数字之间不能来回转换,即false和true不对应任何零或非零的值。 C) 双精度类型double比单精度类型float具有更高的精度和更大的表示范围,但float类型具有速度快、占用内存小的优点。 D) 在...

    【05-面向对象(下)】

    •内部类提供了更好的封装,内部类成员可以直接访问外部类的私有数据,因为内部类被当成其他外部类成员。 •匿名内部类适合用于创建那些仅需要一次使用的类。 非静态内部类 •定义内部类非常简单,只要...

Global site tag (gtag.js) - Google Analytics