Composite

本文介绍了一种使用Java实现的组合模式应用案例。该案例通过创建不同的计算机设备类,如硬盘、机箱等,并将它们组织成复合结构来展示组合模式的实际运用。通过对各个设备设置价格并计算整体价格的方式,演示了组合模式如何简化复杂结构的价格计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package designPatterns;

import java.util.*;

abstract class Equipment {
    
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;
    }


    
public Iterator iter() {
        
return null;
    }


    
public Equipment(final String name) {
        
this.name = name;
    }

}


class Disk extends Equipment {
    
public Disk(String name) {
        
super(name);
    }


    
public double netPrice() {
        
return 1.;
    }


    
public double discountPrice() {
        
return .5;
    }

}


abstract class CompositeEquipment extends Equipment {
    
private int i = 0;

    
private List equipment = new ArrayList();

    
public CompositeEquipment(String name) {
        
super(name);
    }


    
public boolean add(Equipment equipment) {
        
this.equipment.add(equipment);
        
return true;
    }


    
public double netPrice() {
        
double netPrice = 0.;
        Iterator iter 
= equipment.iterator();
        
while (iter.hasNext())
            netPrice 
+= ((Equipment) iter.next()).netPrice();
        
return netPrice;
    }


    
public double discountPrice() {
        
double discountPrice = 0.;
        Iterator iter 
= equipment.iterator();
        
while (iter.hasNext())
            discountPrice 
+= ((Equipment) iter.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();
    }


}


class Chassis extends CompositeEquipment {
    
public Chassis(String name) {
        
super(name);
    }


    
public double netPrice() {
        
return 1+ super.netPrice();
    }


    
public double discountPrice() {
        
return .5 + super.discountPrice();
    }

}


class Cabinet extends CompositeEquipment {
    
public Cabinet(String name) {
        
super(name);
    }


    
public double netPrice() {
        
return 1+ super.netPrice();
    }


    
public double discountPrice() {
        
return .5 + super.discountPrice();
    }

}


public class CompositeTest {
    
public static void main(String[] args) {

        Cabinet cabinet 
= new Cabinet("Tower");

        Chassis chassis 
= new Chassis("PC Chassis");

        cabinet.add(chassis);

        chassis.add(
new Disk("10 GB"));

        System.out.println(
"netPrice=" + cabinet.netPrice());
        System.out.println(
"discountPrice=" + cabinet.discountPrice());

    }

}

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值