- 浏览: 246859 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
composite组合模式
将对象以树形式组织起来和chain of responsibility模式类似
好处:
可以一致使用组合结构和单个对象
不必关心组合体内是否加入新部件
示例代码:
/**
* 组合体接口
*
* @time 下午09:05:03
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public abstract class Equipment {
@SuppressWarnings("unused")
private String name;
// 实际价格
public abstract double netPrice();
// 折扣价格
public abstract double discountPrice();
// 添加部件
public boolean add(Equipment equipment) {
return false;
}
// 删除部件
public boolean remove(Equipment equipment) {
return false;
}
// 访问组合体的方法
@SuppressWarnings("rawtypes")
public Iterator iter() {
return null;
}
public Equipment(String name) {
this.name = name;
}
}
/**
* 部件桌子
*
* @time 下午09:12:01
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Disk extends Equipment {
/**
* 构造器
*
* @param name
*/
public Disk(String name) {
super(name);
}
@Override
public double netPrice() {
return 1;
}
@Override
public double discountPrice() {
return 0.5;
}
}
/**
* 组合体部件
*
* @time 下午09:13:41
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
@SuppressWarnings("rawtypes")
public class CompositeEquipment extends Equipment {
private int i = 0;
// 用来存放子控件
private List equipment = new ArrayList();
/**
* 构造器
*
* @param name
*/
public CompositeEquipment(String name) {
super(name);
}
@SuppressWarnings("unchecked")
@Override
public boolean add(Equipment equipment) {
this.equipment.add(equipment);
return true;
}
@Override
public double netPrice() {
double netPrice = 0;
Iterator iterator = equipment.iterator();
while (iterator.hasNext()) {
netPrice += ((Equipment) iterator.next()).netPrice
();
}
return netPrice;
}
@Override
public double discountPrice() {
double discountPrice = 0;
Iterator iterator = equipment.iterator();
while (iterator.hasNext()) {
discountPrice += ((Equipment) iterator.next
()).discountPrice();
}
return discountPrice;
}
// 访问本组合体内部件的方法
public Iterator iter() {
return equipment.iterator();
}
public boolean hasNext() {
return i < equipment.size();
}
public Object next() {
if (hasNext()) {
return equipment.get(i++);
} else {
throw new NoSuchElementException();
}
}
}
/**
* 框箱
*
* @time 下午09:31:14
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Cabinet extends CompositeEquipment {
public Cabinet(String name) {
super(name);
}
@Override
public double netPrice() {
return 1 + super.netPrice();
}
@Override
public double discountPrice() {
return .5 + super.discountPrice();
}
}
/**
* 盘盒
*
* @time 下午09:30:18
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Chassis extends CompositeEquipment {
public Chassis(String name) {
super(name);
}
@Override
public double netPrice() {
return 1 + super.netPrice();
}
@Override
public double discountPrice() {
return .5 + super.discountPrice();
}
}
/**
* 测试组合模式
*
* @time 下午09:33:44
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class TestComposite {
public static void main(String[] args) {
Cabinet cabinet = new Cabinet("Tower");
Chassis chassis = new Chassis("PC Chassis");
// 将chassis装到tower中
cabinet.add(chassis);
cabinet.netPrice();
cabinet.discountPrice();
}
}
发表评论
-
java 设计模式学习笔记十六 chain of responsibility 职责链设计模式
2012-11-09 00:15 712chain of responsibility 职责链设计模式 ... -
java 设计模式学习笔记十五 strategy 策略设计模式
2012-11-02 21:22 663strategy 策略设计模式 定义一系列算法,把这些算 ... -
java 设计模式学习笔记一 singleton单例
2012-09-08 18:47 621保证在java程序中,一个class类只有一个实例存在 节省 ... -
java 设计模式学习笔记二 工厂模式Factory
2012-09-28 18:03 646工厂模式:factory 工厂模式就相当于创建实例对象的ne ... -
java 设计模式学习笔记三 Builder模式
2012-09-30 23:25 663设计模式 builder 将一个复杂的对象构建与他的表示分离 ... -
java 设计模式学习笔记四 prototype模式
2012-10-01 21:56 609prototype原型模式 用原型实例指定创建对象种类, ... -
java 设计模式学习笔记五Adapter适配器模式
2012-10-02 23:09 611adapter适配器模式 将两个不兼容的类纠合在一起,属于结 ... -
java 设计模式学习笔记六 proxy代理模式
2012-10-03 22:21 668proxy代理模式 为其他对象提供一种代理以控制对这个 ... -
java 设计模式学习笔记七 facade外观模式
2012-10-04 22:44 599facade外观设计模式 为子系统中的一组接口提供一个统一的 ... -
java 设计模式学习笔记九 decorator装饰模式
2012-10-08 23:39 699decorator装饰模式 动态的给一个对象添加一些额外 ... -
java 设计模式学习笔记十 bridge桥模式
2012-10-18 22:04 745bridge桥模式 将抽象和行为划分开来,各自独立但能动态结 ... -
java 设计模式学习笔记十一flyweight享元设计模式
2012-10-19 21:37 588flyweight享元设计模式 避免拥有相同内容的小类的开销 ... -
java 设计模式学习笔记十二 command命令设计模式
2012-10-20 22:06 592command命令设计模式 类似于callback的功能,就 ... -
java 设计模式学习笔记十三 observer设计者模式
2012-10-21 21:59 725observer设计者模式 示例代码如下: /** ... -
java 设计模式学习笔记十四 template模版模式
2012-10-25 21:54 570/** * 模版 * * @time 下午09:58:0 ...
相关推荐
Java设计模式学习笔记
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
java设计模式的学习笔记,其中包含各种模式的代码实现
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
图解java设计模式_学习笔记_java开发解压密码为twj123
23中java设计模式结合生活中用例进行讲解以及spring源码中存在的设计模式才知道原来设计模式如此重要,视频教程链接如下:https://study.163.com/course/courseMain.htm?courseId=1209569921,或者直接在网易云搜索...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
设计模式学习笔记,分析了GOF的23种模式和类设计的原则
韩顺平_Java设计模式笔记.docx
Java JDK 7学习笔记 PDF
我收集的设计模式的学习笔记,采用pdf格式,便于收藏和查看
根据《JAVA与设计模式》整理的笔记及示例代码。
Java基础 java学习笔记 Java Java基础Markdown学习笔记,可转换成PDF、Word等格式
各个模式都有详细的例子C#学习笔记,打开就知道了
JAVA程序设计学习笔记.pdf
该文档为java设计模式的整理笔记,有助于大家更详细了解java设计模式
Java 版设计模式学习笔记-java-design-patterns
JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记