漫谈Java(2-4) - 杯、咖啡杯还是骨瓷咖啡杯——类的选型

本文通过咖啡杯选型实例,探讨了在Java程序中如何正确选择和设计类。从杯子到骨瓷咖啡杯,阐述了不同抽象层次的适用场景及成本考量。

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

​到目前为止,我们讲述了如何创建一个类,以及如何根据类创建一个对象。类是Java程序的基础。类的创建,实际是程序员对所要模拟的对象的抽象。我们同样提到,根据抽象所采集的特性的不同,所分析出的类也是不同的。那么,在一个应用系统中,我们依据什么样的标准来抽象出类呢?本小节将利用咖啡杯选型的例子来进一步阐述类的选型过程。

对应于咖啡屋中的咖啡杯,我们可以尝试选择以下几种原型作为类:

1.选择“杯子”作为类

杯子是一个较大的概念。根据用途分:杯子中可能有茶杯、酒杯、咖啡杯等等。如果我们需要在Java中创建一个“咖啡杯”,而使用了“杯子”作为创建模型,那么就必须为其维护“杯子用途”这一属性(类的属性用于描述类的特性,我们将在第三章详细讲述类的属性),用以与其他杯子进行区分。很明显,创建一个“杯子”类,而实际需求为“咖啡杯”会增加我们的维护成本。因为当我们抽象出“杯子”这个概念时,只会考虑区别于其他器皿的(例如形状,盘子的形状为扁平)的特性,这使得我们不得不维护杯子用途这一特性。

class Cup {

    String cupUsage; //用于标识杯子用途,例如,咖啡杯、酒杯。。。

}

一般说来,咖啡屋中只有咖啡杯便已足够,因此,选择“杯子”作为类,范围过大,而且没有必要。

2.选择“咖啡杯”作为类

咖啡杯有很多种,例如按材质分,就有瓷质、陶质、不锈钢和骨瓷。如果咖啡屋中的咖啡杯有瓷质、陶质、骨瓷,那么我们就应当将“咖啡杯”选为模型(抽象为类),区分不同的对象,只需一个额外属性材质即可。

为了获得某种具体材质的咖啡杯,如“骨瓷咖啡杯”,而将“咖啡杯”作为类的选型,其代码如下所示:

class CoffeeCup {

    String cupMaterial;  //用于标识杯子材质,例如,瓷质、陶质、不锈钢、骨瓷等等。

}

其中,cupMaterial是类的属性,用于标识杯子的材质。首先创建一个CoffeeCup对象实例,然后为cupMaterial赋值“骨瓷”,就能真正创建一个骨瓷咖啡杯。

3.选择“骨瓷咖啡杯”作为类

如果咖啡屋中只有“骨瓷咖啡杯”,那么选择“骨瓷咖啡杯”作为类,是完全符合要求的。但是,大多数的情况下,咖啡屋不可能只有一种材质的咖啡杯,那么,单单拥有“骨瓷咖啡杯”类,便不能满足完整的需求。

我们通过上面的简单实例可以看出,利用“杯子”和“咖啡杯”作为类的,都是正确的设计,唯一的区别在于,具体到咖啡屋这个环境中,“咖啡杯”比杯子更加适宜。而单单利用“骨瓷咖啡杯“作为类,可能不能满足大多数咖啡屋的需求。因此,设计一个类,首先要对涉及的对象进行评估,确定范围,然后再决定抽象到哪个层次。

 

更多技术交流文章,请关注微信公众号【时代码农】

时代码农

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值