java组合

本文介绍了Java中的组合模式,通过具体实例展示了如何在一个类中使用其他对象来实现复用。以手电筒类拥有电池类为例,说明了组合的定义、实现方式及优势。

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

在一个新类的定义中使用其他对象---这就是组合(composition)。组合是在Java中实现程序复用(reusibility)的基本手段之一。

组合与"has-a"

一个对象是另一个对象的数据成员


class Battery {
    public void chargeBattery(double p)
    {
        if (this.power < 1.) {
            this.power = this.power + p;
        }
    }


    public boolean useBattery(double p) {
        if (this.power >= p) {
            this.power = this.power - p;
            return true;
        }
        else {
            this.power = 0.0;
            return false;
        }
    }


    private double power = 0.0;
}


class Torch{
    /** 
     * 10% power per hour use
     * warning when out of power
     */
    public void turnOn(int hours){
        boolean usable;
        usable = this.theBattery.useBattery( hours*0.1 );
        if (usable != true) {
            System.out.println("No more usable, must charge!");
        }
    }


    /**
     * 20% power per hour charge
     */
    public void charge(int hours){
        this.theBattery.chargeBattery( hours*0.2 );
    }


    /**
     * composition
     */
    private Battery theBattery = new Battery();//在Torch类(手电筒)定义中使用Battery类型的对象theBattery作为数据成员
}
public class TestCombination{
    public static void main(String[] args){
        Torch aTorch = new Torch();
        System.out.println("Charge: 2 hours");
        aTorch.charge(2);
        System.out.println("First Turn On: 3 hours");
        aTorch.turnOn(3);
        System.out.println("Second Turn On: 3 hours");
        aTorch.turnOn(3);
    }
}

//定义了电池类Battery,有两个方法chargeBattery()充电和useBattery()使用

我们说,一个Torch对象拥有(has-a)一个Battery对象。上述关系可以表示成:

has-a: 手电有电池 (注意上面的菱形连线)


组合:(1)在Torch类(手电筒)定义中使用Battery类型的对象作为数据成员

(2)在Torch的方法中,通过操纵theBattery对象的接口,来实现Battery类所提供的功能(functionality)。

(3)一个Torch对象拥有(has-a)一个Battery对象

(4)通过组合,就能复用Battery的代码。假如我们还有其他使用Battery的类,比如手机,计算器,我们都可以将Battery对象组合进去。这样就不用为每个类单独编写相关功能了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值