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());

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值