`
numen06
  • 浏览: 76159 次
  • 性别: 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的设计模式

    1. 适配器模式:将两个不兼容的接口转换为可以协同工作的接口,常用于集成第三方库或旧系统。 2. 装饰器模式:动态地给对象添加一些额外的职责,提供了比继承更多的灵活性。 3. 代理模式:为其他对象提供一种代理以...

    java 常用基础类型之强制转换

    这通常发生在需要将数值从精度较高的类型转换为精度较低的类型,或者在处理对象时需要明确指定子类对象为父类类型的情况。在“java 常用基础类型之强制转换”这个主题中,我们将深入探讨Java中的基本数据类型转换...

    java设计模式并附带源码

    本资源“java设计模式并附带源码”提供了一种深入理解并实践Java设计模式的方式,通过源码实例帮助开发者更直观地学习和掌握这些模式。 首先,我们要了解设计模式的基本分类,它们主要分为三类:创建型模式...

    java 设计模式 一个txt 一个pdf

    "适配器模式"允许类之间的接口不兼容的类协同工作,通过创建一个适配器类,将旧的接口转换成期望的新接口。"模板方法模式"在父类中定义了一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个...

    Java 多态中的类型转换

    在Java编程语言中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许我们使用一个通用的接口来处理不同类型的对象,增强了代码的灵活性和可扩展性。本篇将深入探讨Java多态中...

    23种设计模式的Java实现

    Java中的Observer接口和Observable类提供了观察者模式的实现。 20. **状态模式(State)**:允许对象在其内部状态改变时改变其行为,对象看起来似乎修改了它的类。在Java中,状态通常通过实现接口或继承来切换。 ...

    java设计模式源码

    Java设计模式源码集合了23种经典的设计模式,为高级Java开发者提供了深入理解这些模式的实际应用。下面,我们将详细探讨这些设计模式及其在Java中的实现。 1. **单例模式(Singleton)**:保证一个类只有一个实例,...

    java软件设计模式期末总结

    - **外观模式**:提供一个简单的接口来封装一系列复杂的子系统,简化客户端的使用。 - **享元模式**:运用共享技术有效地支持大量细粒度的对象,减少内存占用。 - **代理模式**:为其他对象提供一种代理以控制对...

    Java与模式(PDF)

    - 适配器模式:将不兼容的接口转换为客户期望的接口。 - 装饰器模式:动态地给对象添加新的功能,同时保持原有接口不变。 - 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 - 观察者模式:定义对象...

    java设计模式.chm

    结构型模式中的适配器模式能将不兼容的接口转换为可以互相操作的形式,这在对接第三方库时非常有用。装饰器模式可以在运行时动态地给对象添加新的行为或职责,避免修改已有代码。代理模式可以为其他对象提供一种代理...

    转帖经典---JAVA设计模式

    1. 适配器模式(Adapter):将两个不兼容的接口转换为可以一起工作的接口。 2. 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。 3. 组合模式(Composite):允许你将对象组合成树形结构来表现...

    java与模式(清晰书签版)pdf版文件

    6. **适配器模式 (Adapter Pattern)**:将两个不兼容的接口转换为可以一起工作的形式,使原有代码和新需求可以协同工作。 7. **策略模式 (Strategy Pattern)**:定义一系列的算法,并将每一个算法封装起来,使它们...

    23种设计模式的java实现

    6. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。Java中通过继承或组合来实现适配。 7. **桥接模式**:将抽象部分与实现部分分离,使它们可以独立变化。Java中可以使用接口和多态实现。 8. **装饰...

    JavaDesignPatternNew_java设计模式_a282acom_complete1cj_源码

    7. **适配器模式**:适配器模式使两个不兼容的接口能够协同工作,通过创建一个适配器类来转换原接口。 8. **桥接模式**:桥接模式将抽象部分与它的实现部分分离,使它们可以独立变化。这种模式可以减少类的数量,...

    前端模块化脚手架,可实现类似java的封装继承多态特性

    **封装**:在Java中,封装是隐藏类内部的实现细节,只对外提供公共接口来访问。在前端模块化中,我们可以使用立即执行函数表达式(IIFE)或者ES6的模块系统(import/export)来实现类似的功能,将数据和功能封装在...

    java设计模式java设计模式.pdf

    - **定义**:为子系统中的一组接口提供一个一致的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 - **应用场景**:简化复杂的子系统的使用。 - **实现**:创建一个单一的类,作为整个...

    23种设计模式实现designpattern书籍代码的重写Java版

    本资源提供了《设计模式:可复用面向对象软件的基础》(GOF设计模式)书籍中23种设计模式的Java实现重写版本。下面将对这23种设计模式进行详细解释,并结合提供的文件名来推测每种模式的示例应用。 1. **单例模式...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    1. **封装**:封装是将数据和操作数据的方法捆绑在一起,隐藏对象的属性和实现细节,仅对外提供公共访问方式。这样可以减少外部环境对对象的影响和破坏,提高代码的安全性和稳定性。 2. **继承**:继承是一种通过...

Global site tag (gtag.js) - Google Analytics