知识大全 Composite模式及其在JSF中的应用
Posted 结点
篇首语:学问之根苦,学问之果甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Composite模式及其在JSF中的应用相关的知识,希望对你有一定的参考价值。
Composite模式及其在JSF中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一 学习背景 在学习关于JSF组件时涉及到了posite模式 于是就查看一些资料 以下是自己对这种模式的理解 二 自己整理的一些资料(见参考资料)posite模式意在组成任意复杂度的整体 部分组件层次结构 同时将单个组件或复合组件视为统一的接口 树形组织结构就是其中一种表现形式 树形结构中有叶子结点和非叶子结点(根结点是特例) 非叶子结点可以添加 删除(add() delete())子结点 获取子结点(getChild()) 叶子结点没有 此外树结构的所有节点还有共同的操作(operator()) 用户界面通常由两种基本类型的组件构造 基本组件和容器组件 容器组件可以在其内部嵌套任意数目的组件 而基本组件则不行 使用这两种组件类型 开发者可以建立更强大的组件 进而创建多姿多彩的用户界面 但是在与复杂的组件层次结构打交道时 必须在容器组件和基本组件之间进行区分 比较麻烦 posite提供了一种解决方案 适用它的情况 a 要表现 部分 整体 的层次结构时b 希望在事件组件层次中 同等对待复合组件与单个组件 通过下面的示例来理解示例 基类shape 类有两个派生类Circle和Square(相当于叶子结点或者是单个组件) 第三个派生类CompositeShape是个组合体(相当于非叶子结点或者是容器组件) 它持有一个含有多个shape实例的列表 当调用CompositeShape中的draw()时 它就把这个方法委托给列表中的每一个实例 对于系统而言 一个CompositeShape实例就像是一个独立的shape 可以把它传给使用shape的方法或者对象 实际上 它只是一组shape实例的proxy 程序- Shape java: Public interface Shape Public void draw(); CompositeShape java: [code]Public class CompositeShape implements Shape private Vector Comshape = new Vector(); public void add(Shape shape) Comshape add(shape); Public void draw() for( int i = ; i < shape size(); i ++ ) Shape shape = (Shape) shape elementAt(i); Shape draw();
- package interf; public abstract class Equipment private String name; private double netPrice; private double discountPrice; public Equipment( String name) this name = name; public abstract double netPrice(); public abstract double discountPrice();
- package implEquip; import interf Equipment; public class Disk extends Equipment public Disk( String name) super(name); // TODO Auto generated constructor stub //定义Disk实价为 public double netPrice() return ; //定义了disk折扣价格是 对折 public double discountPrice() return ;
- package implEquip; import java util ArrayList; import java util Iterator; import java util List; import java util NoSuchElementException; import interf Equipment; public class CompositeEquipment extends Equipment private int i= ; // 定义一个Vector 用来存放 儿子 private List equipment = new ArrayList(); public CompositeEquipment( String name) super(name); // TODO Auto generated constructor stub public boolean add(Equipment equipment) this equipment add(equipment); return true; public double netPrice() double netPrice= ; Iterator iter=erator(); while(iter hasNext()) netPrice+=((Equipment)iter next()Price(); return netPrice; public double discountPrice() double discountPrice= ; Iterator iter=erator(); while(iter hasNext()) discountPrice+=((Equipment)iter next()) discountPrice(); return discountPrice; // 注意这里 这里就提供用于访问自己组合体内的部件方法 // 上面dIsk 之所以没有 是因为Disk是个单独(Primitive)的元素 public Iterator iter() return erator() ; // 重载Iterator方法 public boolean hasNext() return i<equipment size(); // 重载Iterator方法 public Object next() if(hasNext()) return equipment get(i++); else throw new NoSuchElementException();
上面CompositeEquipment继承了Equipment 同时为自己里面的对象们提供了外部访问的方法 重载了Iterator Iterator是Java的Collection的一个接口 是Iterator模式的实现 我们再看看CompositeEquipment的两个具体类:盘盒Chassis和箱子Cabinet 箱子里面可以放很多东西 如底板 电源盒 硬盘盒等 盘盒里面可以放一些小设备 如硬盘 软驱等 无疑这两个都是属于组合体性质的
- Cabinet java: package implEquip; public class Cabinet extends CompositeEquipment public Cabinet( String name) super(name); // TODO Auto generated constructor stub public double netPrice() return + super public double discountPrice() return .5+super.discountPrice();
- package implEquip; public class Chassis extends CompositeEquipment public Chassis( String name) super(name); // TODO Auto-generated constructor stub public double netPrice() return 1.+ super public double discountPrice() return .5+super.discountPrice();
- package test; import implEquip.Cabinet; import implEquip.Chassis; import implEquip.Disk; public class CompositeTest /** * @param args */ public static void main( String[] args) // TODO Auto-generated method stub Cabinet cabinet= new Cabinet("Tower"); Chassis chassis= new Chassis("PC Chassis"); // 将PC Chassis装到Tower中 (将盘盒装到箱子里) cabinet.add(chassis); // 将一个10GB的硬盘装到 PC Chassis (将硬盘装到盘盒里) chassis.add( new Disk("10 GB")); // 调用 netPrice()方法; System.out.println("netPrice="+Price()); System.out.println("discountPrice="+cabinet.discountPrice());
相关参考
学会Tiles在JSF框架中的应用指南 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果你还不
JSF框架中使用的设计模式介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 设计模式可以帮助用
应用JSF技术详细介绍Web应用程序开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 与微软V
设计模式在EJB中的应用(下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Factory模式
设计模式在EJB中的应用(上) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 什么是设计模式
基于JSF技术的WEB应用开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 开发基于Java技
Seam为JSF量身定做的应用程序框架 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JSF正开
JSP和JSF合并打造完美Web应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java在最
知识大全 Factory Method模式在Javamail中的应用
FactoryMethod模式在Javamail中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 创建通过 WDO访问数据的 JSF 应用程序(1)
创建通过WDO访问数据的JSF应用程序(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 引言